makaleler / Debian / Ubuntu / Pardus / Vim nedir?, Vim kullanımı, Vim komutları

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

08.12.2010 18:43:54

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

.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 [bullium.com]
http://www.rayninfo.co.uk/vimtips.html [rayninfo.co.uk]
http://www.vim.org/tips/index.php [vim.org]
http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html [viemu.com]
http://vim.wikia.com/wiki/Best_Vim_Tips [vim.wikia.com]
http://www.emrah.com [emrah.com]
yazar husonet

Yorumlar

Bu içerik için sizde yorum yapabilirsiniz!
anasayfa | makaleler | haberler | dosyalar | linkler | hakkımızda