Vim Nedir? ve Nasıl Kullanılır? Vim (VIM – Vi IMproved,Vi’nin geliştirilmiş halidir.), UNIX ve LINUX sistemlerde konsolda kullanılabilecek başarılı editörlerden biridir. Her sistemde hazır olarak bulunması onu ihtiyaç duyulduğunda kullanılacak editör haline getirmiştir. Kullanım dışarıdan zor gibi gözükse de bir sefer kullanma zevkine varınca son derece kolay olduğu anlaşılacaktır.
Vim ile yazı yazmak için belli durumlar söz konusudur. Yazı modu ve editör fonksiyonlarını kullanmak içinde farklı bir konuma geçilmelidir.
Komut konumu bu konumda basılan bir tuş ekranda görüntülenmez ama bir işlevi vardır. O işlev gerçekleşir.
Bir komut başlamadan girilen rakamlar vim editörün o komutu kaç kez tekrarlayacağını belirtir.
Vim çalıştırmak amacıyla konsol içerisinde aşağıdaki biçimde yazılması yeterlidir.
Çalıştırıldıktan sonra aşağıdaki ekran görüntüsü bizleri karşılayacaktır. Çoğu kullanıcı bu ilk çıkan açılış ekranından çıkışı dahi bulamadıkları için vim kullanmaktan vazgeçmişlerdir.
Bu yüzden çıkmak için neler gerektiğini hemen belirteyim.
ESC tuşuna basıldıktan sonra, “ : ” basılır. Ekranın sol alt köşesinde çıkan “ : ” dan sonra “q!” yazılır ve enter tuşuna basılır.
Örnek vim ekran görüntüsü:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@omeroner ~]$vim ~ ~ ~ VIM - Vi IMproved ~ ~ version 6.1 ~ by Bram Moolenaar et al. ~ Vim is open source and freely distributable ~ ~ Help poor children in Uganda! ~ type :help iccf<Enter> for information ~ ~ type :q<Enter> to exit ~ type :help<Enter> or <F1> for on-line help ~ type :help version6<Enter> for version info ~ ~ ~ 0,0-1 All |
Yazı yazma işlemlerine başlamak için “i” harfine veya insert tuşuna basmak yeterlidir bu aşamadan sonra her basılan tuş ekranda yazılmaya başlayacaktır. Tekrar yazı yazma işlemlerinden çıkıp komut işlemlerine dönmek için ESC tuşlarına basılması gerekmektedir.
Linux, Unix, Freedos her yerde çalışır.
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 |
#h | satır yukarı |
l | sağa bir karakter |
j | aşağı satıra |
#j | satır aşağı |
k | yukarı satıra |
H | imleç sayfa başına(high) |
#H | imleç sayfa başından 3 satır aşağıya |
L | imleç sayfa sonuna(low) |
#L | imleç sayfa sonundan # satır yukarıya |
M | imleç sayfa ortasına |
gg | dosya başına |
GG | dosya sonuna |
#G | #.satıra |
:# | #.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şında gösterir(imlecinyerideğişmez)(t=top) |
zb | bulunulan satırı sayfanın sonuna gösterir(imlecin yeri değişmez)(b=bottom) |
zz | bulunulan satırı sayfanın ortasına gösterir(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 ilk harfin bulunduğu konuma gider |
F<harf> | satırda,sola doğru ilk harfin bulunduğu 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)
xveyadl | 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şınakadar sil(b=beginning) |
dd | satırı sil |
d’a | a noktasının bulunduğu satırakadar sil |
‘a | a noktasına kadar sil |
d^ | bulunulanyerden,satır başına kadar sil(^=satırbaşı) |
d$ | bulunulan yerden,satır sonuna kadar sil($=satırsonu) |
D | bulunulan yerden,satır sonuna kadar sil($=satırsonu) |
#dd | #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ırsonu) |
y$ | bulunulan yerden,satır sonuna kadar kopyala($=satırsonu) |
p | bir sonraki pozisyona yapıştır(p=paste) |
P | bir önceki pozisyona yapıştır(P=paste) |
#p | #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ç, karakter seçme (v=visual) |
V | görsel moda geç, satır satır seç |
<CTRL>v | görsel moda geç, blok seç |
d | seçimi sil (d=delete) |
c | seçimi sil ve yazma moduna geç |
y | seçimi kopyala (y=yank) |
p | seçimi yapıştır (p=paste) |
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,şablona uyan tüm metinleri, yeni ile değiştir (g=global) |
:%s/sablon/yeni/g | dosyada,şablona uyan tüm metinleri, yeni ile değiştir (%s dosya) |
:%s/sablon/yeni/gc | dosyada,şablona uyan metinleri, yeni ile değiştir ama önce onay alır (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 | şablon yazılırken aramaya başla (is=instant search) |
:set hls | şablona 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) |
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 (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 |
#cw | #cw # kelimeyi sil ve yerine, yazılanları yaz |
undo, redo
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) |
<CTRL>r | undo işlemini geri al (r=redo) |
#u | son # 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 tab aralığı kadar sağa kaydırır |
<< | satırı, bir tab 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 |
#>> | # satırı birden bir tab aralığı kadar kaydırır |
#> <yukarı ok tuşu> | bulunulan satır dahil yukarı doğru # satırı sağa kaydırır |
:set sw=4 | tab 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 |
:setlist/nolist | görünmeyen karakterleri göstermek veya göstermemek için… |
gaveya: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 |
:setfoldmethod=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>xo | 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://[email protected]/klasor/dosya | dosyaya scp ile uzaktaki makineden açar (Nread=network read) |
:Nwrite scp://[email protected]/klasor/dosya | dosyayı scp ile uzaktaki makineye kaydeder (Nwrite=network write) |
Birçok dosya ile aynı anda çalışma
: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ç |
:b# | # numaralı tampon belleğe geç |
:bd | tampon bellegi siler |
:bd# | # 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
(Terminal veya konsoldan) |
vim +komut1 +komut2 … +komutN dosya_adi |
Vim Tuş Kombinasyonları:
Faydalı 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
So, what do you think ?