Vim nedir?, Vim kullanımı, Vim komutları [pythontr]

Başlıktan da anlaşılacağı üzere yazının tamamı
www.pythontr.com den alıntıdır. Oradan okuyunuz.

------------------------

Yapılandırılabilir bir metin editörüdür.
Vim kullanıcıların mouse'u az kullanmaları için tasarlanmıştır.
Vim öğrenmesi zor ama öğrenildikçe işleri kolaylaştıran bir araçtır.


verilen komutlar başına : koyularak yazılır.

Vim kullanımı

.vimrc Başlangıç ayarları bu dosya içine yazılır.

Sıkca kullanılabilecek bazı ayarlar:
  • :syntax on
    dosya tipine göre renklendirme/biçimlendirme yapar
  • :set is
    arama şablonu yazılırken bulmaya başlar (is= instant search)
  • :set ic
    büyük-küçük harf ayırt etmeden arar (ic=ignore case)
  • :set hls
    metin içinde arama şablonuna uyan bölümleri belirginleştirir (hls=highlighted search)
  • :set hidden
    bir tampon bellekten diğerine, değişiklikleri kaydetmeden geçmeye izin verir
  • :set encoding=utf-8
    default encoding'i utf-8 yapar
  • :!chardet %
    encode durumunu sorgular
  • :set bg=dark
    arkaplani koyulaştırır. Özellikle SSH ile bağlanılan makineler için iyi sonuç veriyor.
  • :set tabstop=8
    tab uzunluğu
  • :set shiftwidth=4
    Görsel modda < ve > karakterlerine basıldığında bloğun ne kadar kaydırılacağı
  • :set softtabstop=4
    boşluklardan oluşan feyk tabın uzunluğu
  • :set expandtab
    tab tuşuna basıldığında boşluk karakterlerinden oluşan feyk tab kullanılmasını sağlar
  • :set autoindent
    alt satıra geçirdiğinde, üst satırın girintisine uyulur
  • :set list
    unprintable karakterleri gösterir
  • :set listchars==tab:»·,trail:·
    tab karakteri için '»', tab boşlukları için '.', satır sonundaki fazlalık boşluklar için '.' gösterir
  • :autocmd InsertEnter * set cursorline cursorcolumn
    Yazma moduna geçince imlecin bulunduğu satırın altı çizilir Bulunulan kolon renklendirilir
  • :autocmd InsertLeave * set nocursorline
    Komut moduna geçince cursorline ve cursorcolumn iptal edilir
  • :highlight cursorline cterm=none ctermfg=7 ctermbg=4
    cursorline özelliği açıksa, bulunulan satırda mavi üzerine sarı yazı kullanılır
  • :highlight cursorcolumn cterm=none ctermfg=7 ctermbg=
    cursorcolumn özelliği açıksa, bulunulan kolonda mavi üzerine sarı yazı kullanılır
  • :set foldmethod=indent
    Girintilere göre bloklama yapar. Özellikle Python kodlarken kullanmakta fayda var.
  • :map <F8> :!python % <enter>
    F8 tuşunu, "!python %" komutunu çalıştıracak şekilde ayarlar



  • :autocmd FileType python set omnifunc=pythoncomplete#Complete
  • :autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
  • :autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
  • :autocmd FileType css set omnifunc=csscomplete#CompleteCSS
  • :autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
  • :autocmd FileType php set omnifunc=phpcomplete#CompletePHP
  • :autocmd FileType c set omnifunc=ccomplete#Complete
  • Çeşitli dosya biçimleri için kod tamamlar. Kod tamamlamak için yazma modundayken ctrl+X ctrl+O

.vimrc örneği
        :syntax on
        :set is
        :set ic
        :set hidden
        :set encoding=utf-8
        :set bg=dark
        :filetype plugin on
        :autocmd InsertEnter * set cursorline cursorcolumn
        :autocmd InsertLeave * set nocursorline nocursorcolumn
        :highlight cursorline cterm=none ctermfg=7 ctermbg=4
        :highlight cursorcolumn cterm=none ctermfg=7 ctermbg=4
        :autocmd BufNewFile,BufRead *.py call PythonSet()

        function PythonSet()
                setlocal
                \ tabstop=8
                \ shiftwidth=4
                \ softtabstop=4
                \ expandtab
                \ autoindent
                \ list
                \ listchars=tab:»·,trail:·
        endfunction


Vim komutları


yazma moduna geçiş
        i                       bulunulan yerde yazma moduna geçer (i=insert)
        I                       satır başına gidip yazma moduna geçer (I=insert)
        a                       bir sonraki yerden bir karakter sağa kayıp yazma moduna geçer (a=append)
        A                       satır sonuna gidip yazma moduna geçer (A=append)
        o                       aşağıya yeni bir satır ekleyip yazma moduna geçer
        O                       yukarıya bir satır ekleyip yazma moduna geçer
        <ESC>                   yazma modundan çıkar


dosya içinde hareket
        h                       sola bir karakter
        l                       sağa bir karakter
        j                       aşağı satıra
        k                       yukarı satıra
        3j                      3 satır aşağıya
        H                       imleç sayfa başına (high)
        3H                      imleç sayfa başından 3 satır aşağıya
        L                       imleç sayfa sonuna (low)
        3L                      imleç sayfa sonundan 3 satır yukarıya
        M                       imleç sayfa ortasına
        gg                      dosya başına
        GG                      dosya sonuna
        3G                      3. satıra
        :3                      3. satıra
        <CTRL>e                 dosyayı yukarı doğru kaydır (imlecin yeri değişmez)
        <CTRL>y                 dosyayı aşağıya doğru kaydır (imlecin yeri değişmez)
        zt                      bulunulan satırı, sayfanın başına getir (imlecin yeri değişmez) (t=top)
        zb                      bulunulan satırı, sayfanın sonuna getir (imlecin yeri değişmez) (b=bottom)
        zz                      bulunulan satırı, sayfanın ortasına getir (imlecin yeri değişmez)
        %                       parantezin eşini bulur ve imleci oraya götürür
        ''                      imlecin bir önceki konumuna geri döner
        '.                      en son değişikliğin yapıldığı satıra geri döner
        f<harf>                 satırda, sağa doğru harfin bulunduğu ilk konuma gider
        F<harf>                 satırda, sola doğru harfin bulunduğu ilk konuma gider
        ma                      imlecin bulunduğu yeri a noktası olarak işaretle (a..z, A..Z, 0..9) (m=mark)
        'a                      a noktasının bulunduğu satıra git
        `a                      a noktasına git
        :marks                  işaretli noktaların listesini gösterir



silme, kopyalama ve yapıştırma (delete, copy, paste)
        x veya dl               karakteri sil (d=delete) (l=letter)
        X                       önceki karakteri sil
        dw                      bir sonraki kelimeye kadar sil (w=word)
        de                      kelimenin sonuna kadar sil (e=end)
        db                      kelimenin başına kadar sil (b=beginning)
        dd                      satırı sil
        d'a                     a noktasının bulunduğu satıra kadar sil
        d`a                     a noktasına kadar sil
        d^                      bulunulan yerden, satır başına kadar sil (^=satır başı)
        d$                      bulunulan yerden, satır sonuna kadar sil ($=satır sonu)
        D                       bulunulan yerden, satır sonuna kadar sil ($=satır sonu)
        3dd                     3 satır sil
        yl                      harfi kopyala (y=yank) (l=letter)
        yw                      bir sonraki kelimeye kadar kopyala (w=word)
        ye                      kelimenin sonuna kadar kopyala (e=end)
        yb                      kelimenin başına kadar kopyala (b=beginning)
        yy                      satırı kopyala
        y'a                     a noktasının bulunduğu satıra kadar kopyala
        y`a                     a noktasına kadar kopyala
        y^                      bulunulan yerden, satır başına kadar kopyala (^=satır sonu)
        y$                      bulunulan yerden, satır sonuna kadar kopyala ($=satır sonu)
        p                       bir sonraki pozisyona yapıştır (p=paste)
        P                       bir önceki pozisyona yapıştır (P=paste)
        3p                      3 kere yapıştır
        set paste               formatlanmış bir metni vim'e yapıştırmadan önce otomatik girintileme yapmasın diye
        set nopaste             yapıştırma işlemi bittikten sonra




dosya veya shell'den veri alma
        :r dosya                dosyanın içeriğini imleçten sonraki kısma yazar
        :r !komut               komutun çıktısını imleçten sonraki kısma yazar




depo kullanarak kopyalama ve yapıştırma
        "add                    silinen satırı 'a' kodlu depoya koy
        "ayy                    kopyalanan satırı 'a' kodlu depoya koy
        "ap                     'a' kodlu depodaki veriyi yapıştır
        :reg a                  'a' kodlu depoda ne olduğunu gösterir (reg=register)
        :reg abcd               a, b c, d depolarında ne olduğunu gösterir
        :reg                    bütün depoları gösterir

        a..z, A..Z, 0..9        depo kodu olarak bu karakterlerden biri kullanılabilir
                                bütün kopyalama ve yapıştırma komutları, depolu biçimde de kullanılabilir




görsel modda kopyalama ve yapıştırma
        v                       görsel moda geç (v=visual)
        <CTRL>v                 görsel modda blok seçme
        d                       seçimi sil (d=delete)
        c                       seçimi sil ve yazma moduna geç (c=cut)
        y                       seçimi kopyala (y=yank)
        p                       seçimi yapıştır (p=paste)




kesme ve değiştirme (cut, replace)
        r<harf>                 imlecin bulunduğu harfi sil ve yerine, <harfi> yaz (r=replace)
        R                       yazma moduna geç ve eski metnin üstüne yaz (R=replace)
        cw                      bir sonraki kelimeye kadar olan kısmı sil ve yerine, yazılanları yaz (c=cut) (w=word)
        ce                      kelimenin sonuna kadar olan kısmı sil ve yerine, yazılanları yaz (e=end)
        cb                      kelimenin başına kadar olan kısmı sil ve yerine, yazılanları yaz (b=beginning)
        c'a                     a noktasının bulunduğu satıra kadar sil ve yerine, yazılanları yaz
        c`a                     a noktasına kadar sil ve yerine, yazılanları yaz
        c^                      satırın başına kadar olan kısmı sil ve yerine, yazılanları yaz (^=satır başı)
        c$                      satırın sonuna kadar olan kısmı sil ve yerine, yazılanları yaz ($=satır sonu)
        C                       satırın sonuna kadar olan kısmı sil ve yerine, yazılanları yaz ($=satır sonu)
        3cw                     3 kelimeyi sil ve yerine, yazılanları yaz



arama ve otomatik değiştirme
        *                       imlecin üzerinde bulunduğu kelimenin tekrarını sonra doğru arar
        #                       imlecin üzerinde bulunduğu kelimenin tekrarını başa doğru arar
        /sablon                 sablonu sona doğru ara
        ?sablon                 sablonu başa doğru ara
        n                       bir sonrakini bul
        N                       bir öncekini bul
        :s/sablon/yeni          sablona uyan ilk metni, yenisi ile değiştir
        :s/sablon/yeni/g        satırda, sablona uyan metinleri, yeni ile değiştir (g=global)
        :%s/sablon/yeni/g       dosyada, sablona uyan metinleri, yeni ile değiştir 
        :%s/sablon/yeni/gc      dosyada, sablona uyan metinleri, yeni ile değiştir ama önce onay al (c=confirm)
        şablonda ^              satır başı
        şablonda $              satır sonu
        şablonda [abc]          bu karakterlerden biri...
        şablonda [^abc]         bu karakterlerden hiçbiri...
        şablonda .              herhangi bir karakter
        şablonda *              herhangi bir karakter dizisi
        q/ veya /<CTRL>f        ileriye doğru yapılmış aramaların listesini verir
        q? veya ?<CTRL>f        geriye doğru yapılmış aramaların listesini verir
        :set is                 sablon yazılırken aramaya başla (is=instant search)
        :set hls                sablona uyanları belirginleştir (hls=highlighted search)
        :set nohls              hls modunu kapat (nohls=no highlighted search)
        :set ic                 büyük-küçük harf ayırt etmeden arar (ic=ignore case)




undo, redo
        :undolist
        u                       yapılan işlemi geri al (u=undo)
        U                       satırı, imlecin satıra geldiği andaki şekle geri döndür (U=undo)
        :u[ndo]
        :earlier

        <CTRL>r                 undo işlemini geri al (r=redo)
        :red[o]
        :later
        3u                      son 3 değişikliği geri al




biçimlendirme
        :set expandtab          tab karakterlerini 
        :retab                  boşluk karakterine çevirir

        :set noexpandtab        uygun sayıda boşluk karakterini
        :retab                  tab karakterine çevirir

        >>                      satırı bir kaydırma aralığı kadar sağa kaydırır
        <<                      satırı, bir kaydırma aralığı kadar sola kaydırır
        > <sağ ok tuşu>         bulunulan satırı kaydırır
        > <yukarı ok tuşu>      bulunulan satır ve bir üst satırı kaydırır
        > <aşağı ok tuşu>       bulunulan satır ve bir alt satırı kaydırır
        3>>                     3 satırı birden bir kaydırma aralığı kadar kaydırır
        3> <yukarı ok tuşu>     bulunulan satır dahil yukarı doğru 3 satırı sağa kaydırır
        :set sw=4               kaydırma aralığının kaç karakter uzunluğunda olacağını belirtir (sw=shift width)
        :set tabstop=8          tab ile kaç karakter gidileceğini belirler
        :set nu                 satır numaralarını gösterir (nu=number)
        :set nonu               satır numaralarını gizler (nonu=no number)
        ~                       imlecin üstünde bulunduğu karakteri büyükse küçük, küçükse büyük yapar 
        :TOhtml                 metni üretecek HTML kodunu üretir, renklendirmeleri dikkate alır



yazma/işlem kolaylaştırıcılar
        <CTRL>l                 refresh
        :set list/nolist        görünmeyen karakterleri göstermek veya göstermemek için...
        ga veya :as             imlecin altındaki karakterin, karakter kodunu gösterir
        <CTRL>n                 yazma modundayken kelimeyi, var olan kelimelere bakarak tamamlar (n=next)
        <CTRL>p                 yazma modundayken kelimeyi, var olan kelimelere bakarak tamamlar (p=previous)
        .                       son yapılan işlemi tekrarlar
        q: veya :<CTRL>f        kullanılmış komutların listesini verir
        q/ veya /<CTRL>f        ileriye doğru yapılmış aramaların listesini verir
        q? veya ?<CTRL>f        geriye doğru yapılmış aramaların listesini verir
        <CTRL>c <CTRL>c         komut/arama listesinden çıkmak için
        <CTRL>x                 imleçin üstünde bulunduğu sayıyı bir azaltır
        <CTRL>a                 imleçin üstünde bulunduğu sayıyı bir çoğaltır
                                screen altındayken <CTRL>aa
        :set foldmethod=indent  indent'lere göre blokları belirler (Python kodu için...)
        zo                      bloğu açar
        zO                      bütün blokları açar
        zc                      bloğu kapatır
        zC                      bütün blokları kapatır
        za                      açıksa, kapalı; kapalıysa, açık hale getirir
        zj                      sonraki bloğa geçer
        zk                      önceki bloğa geçer
        <CTRL> x o              omnifunc tanımlanmış dosya biçimleri için kod tamamlar



macro
        q                       ilk seferde makro bloğuna gider
                                bundan sonra girilen ilk harf makronun adı olur
                                bundan sonra yapılan bütün işlemler makro bloğuna kaydedilir
                                tekrar q'ye basıldığında makro kaydı sona erer
        @<harf>                 makroyu çalıştırır
        "<harf>p                makro içeriğini metin olarak sayfaya yazar
                                ~/.viminfo dosyasından da makro kayıtları görünebilir


dosya işlemleri
        :new                    yeni dosya oluştur
        :S                      dosya tarayıcısını aç. Seçimler için <ENTER> kullan
        :e dosya                var olan bir dosyayı aç (e=edit)
        :w                      yapılan değişiklikleri kaydet (w=write)
        :w dosya                yapılan değişiklikleri 'dosya' adı ile kaydet (w=write)
        :wq                     yapılan değişiklikleri kaydedip çık (w=write) (q=quit)
        :q!                     yapılan değişiklikleri kaydetmeden çık (q=quit)
        :Nread scp://kullanici@12.12.12.12/klasor/dosya         dosyaya scp ile uzaktaki makineden açar (Nread=network read)
        :Nwrite scp://kullanici@12.12.12.12/klasor/dosya        dosyayı scp ile uzaktaki makineye kaydeder (Nwrite=network write)



birçok dosya ile aynı anda çalışma
        :e dosya                dosyayı aç (e=edit)
        :bn                     bir sonraki tampon belleğe geç
        :bp                     bir önceki tampon belleğe geç
        :wn                     değişiklikleri kaydet ve bir sonraki tampon belleğe geç
        :wp                     değişiklikleri kaydet ve bir önceki tampon belleğe geç
        :bn!                    değişiklikleri kaydetmeden bir sonraki tampon belleğe geç
        :b3                     3 numaralı tampon belleğe geç
        :bd                     tampon bellegi siler
        :bd3                    3 numaralı tampon belleği siler
        :set hidden             bir tampon bellekten diğerine, değişiklikleri kaydetmeden geçmeye izin verir





Tab'lar ile çalışma
        :tabedit                yeni tab oluşturur
        :tabnew dosya_adi       yeni tab oluşturur ve dosyayı bu tab'da açar
        :tabc                   tab'ı kapatır
        :tabmove                tab'ı taşı
        gt                      sonraki tab'a git
        gT                      önceki tab'a git



birçok pencere ile aynı anda çalışma
        :vsp                    ekranı dikeyde iki pencereye böl (vsp=vertical split)
        :sp                     ekranı yatayda iki pencereye böl (sp=split)
        <CTRL>w<CTRL>w          diğer pencereye geç
        <CTRL>w<ok tuşu>        ok yönündeki pencereye geç
        <CTRL>w<hjkl>           yön karakterine göre pencereye geç
        <CTRL>w +               pencereyi 1 satır uzat
        <CTRL>w -               pencereyi 1 satır kısalt
        <CTRL>w c               pencereyi kapat
        :q                      pencereyi kapat (q=quit)




shell
        :!komut                 komutu çalıştır
        :sh                     shell'i çalıştır. Shell'den çıkmak için "exit" komutunu kullan




vim'i açarken komut çalıştırma
        vim +komut1 +komut2 ... +komutN dosya_adi



Sık kullandığım komutlar

Tüm boş satırları silme
:g/^\s*$/d


Tüm Satırları Büyük Harf Yapma
:%s/^.*$/\U&/g


Tüm Satırları Küçük Harf Yapma
:%s/^.*$/\L&/g 


2 ve daha fazla boşluk karakterini temizleme
:%s/ \{2,}/ /g
yada bu yeni versiyon \+
s/  \+/ /g


2 ve daha fazla tab karakterini temizleme
:%s/^I\{1,}//g


Kopyala Yapıştır olarak alınan mysql schemayı temizleyen vim kodu
:%s/\s[0-9]\+\(.*\)\(int\|varchar\|double\|text\).*/\1/g


Düzenli bir şekilde açılan tag ın kapanan tagla birlikte değiştirm örneği
:%s/<td.\{-}>/[td]/g


Karakter ve Kelime Sayısını Görmek İçin
g ctrl+g


Son Yapılan İşlemle Açılması
vim !$



<option label="Bla Bla" value="2338">Bla Bla</option> -> Bla Bla



:%s/<.*>\(.*\)<.*>/\1/g


Vim editörü dondurma yada kilitleme
ctrl + s
Not: Windows tan gelen bir kaydetme alışkanlığınız var ise bu durum canınızı sıkabilir.
Vim editörü dondurma yada kilitleme ekranında kurtulmak için ise aşağıdaki tuş kombinasyonunu kullanabilirsiniz.
ctrl + q


Vim editörü yinelenen satırları kaldırma
:1,$!uniq
:sort u


Vim editörü satırlar üzerinde sıralama yapma
Sıralama yap
:%sort

Sıralamayı tersine çevir
:%sort!



numeric sorgulama



:sort n

Sıralama yaparken yinelenen satırları uniq yapar
:sort u
Olduğu şekilde tersine çevirir.



:g/^/m0








Pydiction kur-Python kodlarını tab ile tamamlaması için (Vim editörü notları)

http://www.vim.org/scripts/script.php?script_id=850 [vim.org]
adresinden en yeni paketi indirip açalım 

mkdir -p ~/.vim/after/ftplugin/pydiction/
cp python_pydiction.vim ~/.vim/after/ftplugin/
cp complete-dict ~/.vim/after/ftplugin/pydiction/

.vimrc dosyasına
 :filetype plugin on
 :let g:pydiction_location = '~/.vim/after/ftplugin/pydiction/complete-dict'

Bu kodlar Vim editöründe tab ile tamamlama yapmamıza yardımcı olacaktır.

Tab kısayolları vim tabedit kullanım notları

  • Vim editöründe Tab'lar ile Çalışma



 :tabedit  yeni tab oluşturur
 :tabnew dosya_adi yeni tab oluşturur ve dosyayı bu tab'da açar
 :tabc   tabı kapatır
 :tabmove  tabı taşı
 gt   sonraki tab'a git
 gT   öceki tab'a git



NerdTREE ve Vim editörü entegrasyonu kurulumu hakkında https://www.pythontr.com/makale/nerdtree-kurulumu-nasil-yapilir-9


Yorumlar

Popüler Yayınlar