Pythontr

husonet | Tarih: 08.12.2010

Vim nedir?, Vim kullanımı, Vim komutları

Vim kullanımı, Vim editörü hakkında detaylar, Vim kısayol tuşları

Vim Nedir?


Doğrusunu isterseniz Vim bir metin editörüdür fakat Vim bir kelime işlemci değildir. Tanımı biraz daha açmak istiyorum. Vim, WYSIWYG "What You See Is What You Get" yani ne görüyorsan onu alırsın' şeklinde düzenlemez ama etkili bir metin düzenlemeyi mümkün kılmak için geliştirilmiş yapılandırılabilir bir metin editörüdür. Ayrıca UNIX sistemlerde dağıtalan VI metin editörünün geliştirilmiş halidir.


Vim için genellikle Linux üzerinde yazılım geliştirenlerin programlama editörüdür diye düşünülür aslında Vim sadece programcılar için geliştirilen bir editör değildir. Özetle her türlü metin düzenlemesi için oldukça kullanışlı bir editördü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.


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

{reklam}
.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 kullanımı

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 !$


Tamponlar (Bufferlar) arasında geçiş yapma
:bf            # Go to first file.
:bl # Go to last file
:bn # Go to next file.
:bp # Go to previous file.
:bw # Close file.


<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


ilgili konular
Vim nasıl kullanılır?
Vim komutları
Vim Pydiction
Vim tab kısayolları
Vim NerdTREE

linkler
http://bullium.com/support/vim.html
http://www.rayninfo.co.uk/vimtips.html
http://www.vim.org/tips/index.php
http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html
http://vim.wikia.com/wiki/Best_Vim_Tips
http://www.emrah.com