Daha önce bilmenizi istediğiniz basit Vim komutları [kapalı]


378

Vim'de her zaman yeni komutlar öğreniyorum, ama eminim ki herkes arada bir yeni şeyler öğrenir. Son zamanlarda bunu öğrendim:

zz, zt, zb - imleci ekranın ortasında, üstünde veya altında konumlandır

Çağlar önce öğrenmenizi istediğiniz bazı yararlı veya zarif komutlar nelerdir?


46
teknik olarak, zz, zt, zb ekranı imleç ortada / üstte / altta olacak şekilde konumlandırıyor . imleci orta / üst / alt tarafa konumlandırmak için M, H veya L tuşlarını kullanın. Her iki komut seti de kullanışlıdır!
Peter

1
Bu gönderiyi aylar ya da bir yıl önce okumak o zamandan beri her gün bana yardımcı oldu. dap, bu yazı sayesinde paragrafları saatte birkaç kez taşımak için kullandığım bir şey.
Funkodebat

33
Hiç yapıcı olmayan olarak işaretlenmiş bir sayfadan bu kadar çok hile aldım :) Herkese teşekkürler.
Tasos Bitsios

Yanıtlar:


315

Keşke ekleme modundan çıkmak CtrlCyerine kullanabileceğinizi bilseydim Esc. Bu benim için gerçek bir verimlilik artışı oldu.


93
Caps-Lock'umu bir Esc'e yeniden eşledim. Bu hem normal Esc hem de Ctrl-C'den daha kolay
Kasper

114
Kutsal saçmalık. Vi ve 15 yıl bunu hiç bilmiyordum ...
Chris K

31
bir diğer popüler şey ise ESC için 'jj' kullanmaktı. Bu yaklaşımı şimdiye kadar seviyorum. : haritadır jj <ESC>
claytron

27
Ayrıca CTRL- [kullanabilirsiniz, çünkü her iki elin de küçük olması ... her iki elin de biraz dönmesi).
Jason Down

42
@ claytron'un bir varyantı olarak 'jk' kullanın. Bilmeden zaten EKLEME modundaysanız, jk sizi bulunduğunuz yerden terk eder, böylece istediğiniz zaman vurabilirsiniz (kredi: başka biri ... benim fikrim değil).
Kyle

197

Öğrendiğim en son "vay" hilesi karmaşık arama ve değiştirme yöntemidir. Oldukça sık geçmişte, ikame yapmak için gerçekten karmaşık bir regexp yaşadım ve işe yaramadı. Daha iyi bir yol var:

:set incsearch             " I have this in .vimrc
/my complicated regexp     " Highlighted as you enter characters
:%s//replace with this/    " You don't have to type it again

Buradaki "hile" (daha iyi bir kelime istemek için) regexp oluşturmak için aramayı kullanabilmenin (ve karakter girerken 'incsearch' karakterleri vurgulayarak) ve ardından ikamede boş bir desen kullanmanın yoludur: boş kalıbı varsayılan olarak son arama kalıbıdır.

Misal:

/blue\(\d\+\)
:%s//red\1/

Eşittir:

:%s/blue\(\d\+\)/red\1/

Görmek:

:help 'incsearch'
:help :substitute

1
vay ... Böyle bir şey arıyordum
figurassa

1
Evet, keşke bunu daha erken tanımış olsaydım. Ama sonra tekrar, vim'de yeni öğrendiğim her şey hakkında söylüyorum.
Robert Massaioli

26
Bunu gerçekten seven herkes <Ctrl-R>/için son arama sorgusunu eklemeyi deneyin . (Bkz. :help i_CTRL-R) Yukarıdakilere benzerler için gerçekten yararlıdır, ancak arama sonuçlarının bir kısmını yakalamak istiyorsunuz. : (Böyle %s:/\\([fF]rank\\) and mary/marie and \1/g)
idbrii

4
:%s//...ile de çalışır *(imlecin altındaki arama kelimesi). Görsel yıldız arama adı verilen bir eklenti *, seçilen bir metnin aranmasını ve değiştirilmesini kolaylaştıran görsel bir seçimin tüm metniyle eşleşme işlevini genişletir , örneğin v3e(görsel olarak 3 kelime seçin) *(arama) ve :%s//replacement/g(tüm oluşumları " değiştirme"). Ben küresel ikame komutu için bir eşleme olduğunu sık sık kullanırız :nmap <Leader>s :%s///g<left><left>.
Patrick Oscity

1
@idbrii insanlar Vim noobs (benim) olabilir okuma beri %s:olmalıdır :%sve benim sistem için, ihtiyacım \(\)yerine\\(\\)
Charlie Gorichanaz

155

Bir arkadaşım için en çok kullandığım komutun bu referansını oluşturdum:

select                                   v
select row(s)                            SHIFT + v
select blocks (columns)                  CTRL  + v
indent selected text                     >
unindent selected text                   <
list buffers                             :ls
open buffer                              :bN (N = buffer number)
print                                    :hardcopy
open a file                              :e /path/to/file.txt
                                         :e C:\Path\To\File.txt
sort selected rows                       :sort
search for word under cursor             *
open file under cursor                   gf
  (absolute path or relative)
format selected code                     =
select contents of entire file           ggVG
convert selected text to uppercase       U
convert selected text to lowercase       u
invert case of selected text             ~
convert tabs to spaces                   :retab
start recording a macro                  qX (X = key to assign macro to)
stop recording a macro                   q
playback macro                           @X (X = key macro was assigned to)
replay previously played macro *         @@
auto-complete a word you are typing **   CTRL + n
bookmark current place in file           mX (X = key to assign bookmark to)
jump to bookmark                         `X (X = key bookmark was assigned to
                                             ` = back tick/tilde key)
show all bookmarks                       :marks
delete a bookmark                        :delm X (X = key bookmark to delete)
delete all bookmarks                     :delm!
split screen horizontally                :split
split screen vertically                  :vsplit
navigating split screens                 CTRL + w + j = move down a screen
                                         CTRL + w + k = move up a screen
                                         CTRL + w + h = move left a screen
                                         CTRL + w + l = move right a screen
close all other split screens            :only

*  - As with other commands in vi, you can playback a macro any number of times.
     The following command would playback the macro assigned to the key `w' 100
     times: 100@w

** - Vim uses words that exist in your current buffer and any other buffer you may have open for auto-complete suggestions.

X adındaki işarete gitmek için "~ X" yazıyorsunuz. Bu benim için işe yaramıyor - bunun yerine "'X" (tek tırnak) kullanıyorum.

Vay. Kesinlikle haklısın. Ben kılavuzu yazarken gözüm sadece tilde gördüm ve arka kene üzerinde glossed sanırım. Ben buna göre güncelleyeceğim. Söylediğin için teşekkürler.
brian newman

5
Bu liste güzel, ama bu tabloyu nasıl çizdiğinizi gerçekten bilmek istiyorum. VIM ile mi? hangi eklenti? Şu anda bir tane arıyorum.
Kent

6
VIM kullandım ama eklenti kullanmadım. Ancak; select block özelliğini kullanmak göreceli olarak kolaylaştırdı. Listeyi yararlı bulduğunuza sevindim! ~ brian
brian newman

11
Blok seçimi için Ctrl-Q, mswin.vim öğesinin CTRL-V'nin yapışmasına izin veren bir özelliğidir. Çoğu vim kullanıcısı bu kötülüğü düşünür ve mswin.vim'i devre dışı bırakır. "+ P veya Ctrl-R + pano içeriğini eklemek o kadar zor değil.
Benoit

144

gi , imleci daha önce bulunduğu yere yerleştirerek ekleme moduna geçer.


29
g;Şimdi öğrendiğimde çok mutlu oldum bu beni gözyaşlarına
götürdü

@ longdeqidao hiç de değil. Son ekleme noktasına geri döner. Böylece kalp içeriğinize göz atabilirsiniz ve sizi son yerleştirdiğiniz yere geri götürür.
Cyber ​​Oliveira

9
FYI, g; (@PatrickOscity yukarıda belirtilen) imleci düzenleme yapılan yere yerleştirir. Tarihe geri dönmek için birden çok kez kullanabilirsiniz. Bunu vim yardımım burada tuhaf bir nedenden dolayı bahsetmediği için buraya not etmek.
PonyEars

13
Vim'in sezgiselliği beni etkilemekten asla vazgeçmez. @PonyEars bahsettiğim g;için "ters" olup olmadığını denemek g,ve lo ve hani, biz ileri geri gidebiliriz!
Cyber ​​Oliveira

adaha kısadır. :) Ama gigerçekten çok sezgiseldir, ggenellikle zıt bir işlemdir.
Erwin Rooijakkers

105
: Q!

Keşke vi'ya ilk kez başlamadan önce bilseydim.


23
bir emacs adamı olarak, okuduğum en komik yorum bu. Olmak istediğini emin değilim. Bugün beni mutlu ettin.
pjammer

29
Aynı gün ilk kez vim ve emacs'ı denemeyi hatırlıyorum, nasıl çıkacağımı bilmiyorum. Kendi
physicsmichael

13
+1. Vim'i ilk başlattığınızda, varsayılan mesaj "write: q to quit" olmalıdır. Ben çok zaman kazandım lol
José Ramón

2
@ JoséRamón Ama does bir dosyayı açmadan vim girerseniz varsayılan olarak ekranda gösteriyor. Bu yakın zamanda eklendi mi? Vim'i yıllar önce denediğimi açıkça hatırlıyorum ve zaten oradaydı. Ayrıca :q!, arabelleği kaydetmeden çıkmayı denerseniz de kullanmanız gerektiğini söyler .
mechalynx

5
@ivy_lynx evet, haklı olabilirsiniz, ancak vim'i dosyasız açarsanız. Genellikle, vim'i ilk açtığınızda Unix'te bir yapılandırma dosyasını düzenlemeniz gerektiğinden, "$ vim dosyası" yazarsınız ve çıkış yolunuzu bulamazsınız. Yoksa sadece ben miyim?
José Ramón

56

^ XF , geçerli dizindeki dosya adlarını kullanmayı tamamlar. Artık terminalden kopyalama / yapıştırma veya ağrılı çift kontrol yok.

^ XP geçerli dosyadaki kelimeleri kullanmayı tamamlar

: set scrollbind bir arabelleği diğerinin yanına kaydırmaya zorlar. örneğin pencerenizi iki dikey bölmeye ayırın. Her birine bir dosya yükleyin (belki de aynı dosyanın farklı sürümleri). Do :set scrollbindher. Şimdi bir kaydırdığınızda , her iki bölme birlikte kaydırılır. Dosyaları karşılaştırmak için idealdir.


Kaydırma işlemini etkinleştirdikten sonra nasıl devre dışı bırakılır?
09:23

2
jinxed_coder : :set noscbkapatmak ve açmak için kullanın :set scb(değil :scrollbind). :h scrollbind
jmdeldin

Whoops. ': Scrollbind ayarla' için düzeltildi.
Brian Agnew

7
^ XP , dosyadaki önceki sözcükleri tercih ederek, ^ XN dosyadaki sonraki sözcükleri tercih ederek tamamlar .
u0b34a0f6ae

Ayrıca, file1 dosyasını açarak :diffsplit file2veya vim ile başlatarak dosyaları da dağıtabilirsiniz vim -d file1 file2. Vim otomatik olarak iki dosyayı kaydırır.
Brian McCutchon

51

Köşeli ayraçlar / parantezler / tırnak işaretleri / etiketler içindeki metni değiştirmek için bir dizi komut kullanabilirsiniz. Grubun başlangıcını ve bitişini bulmak zorunda kalmamak çok faydalıdır. ci(, ci{, ci<, ci", ci', ctNe tür bir nesneyi değiştirmek istediğinize bağlı olarak deneyin . Veca(, ca{, ... varyantlar köşeli parantezleri / tırnak işaretlerini de siler.

Hatırlaması kolay: köşeli ayraç içindeki bir ifadeyi değiştirin / köşeli ayraçlı bir ifadeyi değiştirin.


16
bu sadece için değil c. Bunu dsilmek için (örn. Di (veya da (), yyank, vseçmek vb.)
İle yapabilirsiniz

Merhaba! Bunun için belgelerin kullanıldığını bilmek ister misiniz :help? Onu hiç bir yerde bulamıyorum. > _ <
Matej

1
@Peter Daha önce bunları kontrol ettim, ancak tuhaf "iç + sınırlayıcı" davranışından bahsedemedim. İçinde olduğu ortaya çıktı :help motion.txt! Teşekkürler!
Matej

2
Bu ipucu ilk etapta
Justin L.

1
HTML veya XML'yi düzenliyorsanız cit, geçerli etiketin içeriğini değiştirmek için kullanabilirsiniz . Örneğin <span>Some text</span>, imleciniz "m" nin üzerindeyse ditalmak için yapabilirsiniz <span></span>.
Jonathan Potter

47
  1. Hiç basma Esc. Nedenini öğrenmek için bu cevaba bakınız . Yukarıda belirtildiği gibi, Ctrl+ Cdaha iyi bir alternatiftir. Caps LockKaçmak için anahtarınızı eşlemenizi şiddetle tavsiye ederim .

  2. Eğer bir düzenliyorsanız Ctags bir etiket dosyası ve kullanma, uyumlu bir dil :ta, Ctrl+ ]vb hatta birden fazla dosya üzerinde, kod gezinmek için harika bir yoldur. Ayrıca, tags dosyasını kullanarak Ctrl+ Nve Ctrl+ Ptamamlama tuş vuruşlarını azaltmanın harika bir yoludur.

  3. Tamponunuzdan daha geniş olduğu için sarılmış bir satırı düzenliyorsanız, gk ve gj tuşlarını kullanarak yukarı / aşağı hareket edebilirsiniz.

  4. Kötü alışkanlıkları öğrenmeden önce hareket komutlarının etkili kullanımına odaklanmaya çalışın. Xa birkaç kez basmak yerine 'dt' veya 'd3w' kullanmak gibi şeyler. Temel olarak, aynı tuşa art arda bastığınızda, muhtemelen aynı şeyi yapmanın daha iyi / daha hızlı / daha kısa bir yolu vardır.


11
Escape kullanmıyor musunuz? Bu sapkınlık. Kaçış, hem işte hem de iş dışında en iyi arkadaşınızdır.
xcramps

28
eğer bu kadar iyi bir arkadaşsa, neden klavyede bu kadar uzak?
anthony

çünkü insanların% 99'u asla kullanmıyor.
Stefano Borini

5
Escape, klavyemdeki diğer tuşlardan birkaç inç ayrıldı. Bunu kaçıramazsın.
Brian Carper

15
# 3 harika! Hala yeni şeyler öğreniyor ...
brian newman

45

Yıldız tuşu, *imlecin altındaki kelimeyi arayacaktır.

[+ Tabsizi imlecinizin altındaki C işlevinin tanımına götürür. (Yine de her zaman işe yaramaz.)


1
* Nix kullanıyorsanız, vim'e C'ye ek olarak birçok dilde herhangi bir işlevin veya değişkenin tanımını nasıl bulacağını söyleyen bir "etiketler" dosyası oluşturmayı öğrenmek için 'man ctags' komutunu deneyin. Tanımı bulmak için ctrl +] kullanın veya imlecinizin altındaki jetonu kullanın veya bildiği herhangi bir jetonu bulmak için: tag tokenToFind kullanın. Hatta vim dosyasını "vim -t tokenToFind" ile başlatabilir ve imleci düzenlemek istediğiniz işleve getirebilirsiniz.
Adam Liss

23
# tuşu imlecin altındaki kelimeyi ters yönde
arayacaktır

github.com/bronson/vim-visual-star-search görsel seçimler için yıldız aramayı etkinleştirir. Artık kaçırmak istemiyorum.
Patrick Oscity

[ + Tab pathgibi gerekli klasörlerle genişlettiğinizde her zaman çalışacaktırset path+=path/to/files
dlmeetei

43

ZZ (gibi çalışır :wq )

Ve imleç konumu hakkında: Her zaman ekranın ortasında kalan bir imlecin havalı olduğunu gördüm -

set scrolloff=9999

2
Bunu bilmiyordum. :xbunu da yapar
sa125

18
Tamamen doğru değil. İşleri gibi :x, oysa sadece değişiklikler varsa dosyayı kaydeder, hangi :wqdaima dosyayı kaydeder.
Erik B

ZQ (gibi çalışır: q!)
xialu

42

Vim brainstore'uma en son eklemelerimden bazıları:

  • ^wi: Pencereyi bölerek imlecin altındaki etikete atlayın.
  • cib/ciB: Sırasıyla geçerli parantez () veya parantez {} içindeki metni değiştirin.
  • :set listchars=tab:>-,trail:_ list: Sekmeleri / sondaki boşlukları diğer boşluklardan görsel olarak farklı göster. Python kodlamasında çok yardımcı olur.

4
Bunun daha fazla oy alması gerekiyor! cibHarika.
Matt Parker

ayrıca: CIW mevcut sözcüğe değiştirmek (ya da kow, aynı ama sol için) Ciw mevcut W = o değiştirmek için (rd) Sames yerine c v görsel olarak seçmek yerine değiştirilmesi olacaktır.
lajarre

5
cib "ci (" yazmakla eşdeğerdir. Ayrıca, diğer parantez türleri için "ci [", "ci {" veya (vimrc'niz doğru ayarlanmışsa) "ci <" yazabilirsiniz.
Tom Lord

2
Ayrıca, bir etiket içindeki metni değiştirmek için "cit". XML / HTML ile çalışırken çok kullanışlıdır.
Walter

tercih ederseniz, bunun yerine kapanış ayracı ekleyebileceğinizi de belirtmek gerekir. ayrıca, az önce öğrendim ci}& cit- wow, bu çok faydalı olacak. vi[m]çok heyecan verici bir program olduğunu kanıtlıyor!
underscore_d


34

: shell Vim'den bir kabuk konsolu başlatmak için. Örneğin Vim'den çıkmadan bir komut dosyasını test etmek istediğinizde kullanışlıdır. Basitçe hit ^ d Eğer kabuk konsolu ile yapılır ve sonra Vim ve düzenlediğiniz dosyaya geri geldiklerinde.


Sanırım :!shçok zordu. Tercihim o anki tampon veya örneğin kullanımından kayıtları / tamamlamaları kullanarak oluşturma komut hatlarına kolay olduğu için %/ %:hakım dosya için / birdizin vb
sehe

1
Bu çok havalı. Ben her gün kullanıyorum .. Bundan önce, oldu: wq, cli şeyler yapmak, aynı dosya ile vim yeniden .. Büyük optimizasyon
Flashin

7
Kabuğa geçmek için Ctrl-Z ve vim'e geri dönmek için fg <ENTER>.
Mario G.

Put map <Esc>! :shell<CR>Sepetinde .vimrcve sadece Alt + !, veya Alt + Shift + 1 ile kabuk başlatabilirsiniz. (Anımsatıcı: deniz :!{cmd}{cmd}
hayvanı

:shellyeni bir iç içe kabuk düzeyi başlatacak. Oysa ctrl-zdeğil.
wisbucky


31

vimcryption

vim -x dosyaadı.txt

Sizden bir parola girmeniz, düzenlemeniz ve kaydetmeniz istenir. Şimdi dosyayı vi'de açtığınızda, görüntülemek için şifreyi girmeniz gerekecektir.


Bunu dropbox'ınızla senkronize edin ve gerçekten güzel bir şifre yöneticisi edinin ;-)
Luis Nell

15
Ancak, siz set cryptmethod=blowfish(yalnızca 7.3+ sürümünde mevcut değilse), gülünç mukavemete sahip bir algoritma kullanacağını unutmayın. Daha help encryptionfazla ayrıntı için bakınız .
AB

3
Lütfen vim şifreleme kullanmayın, iyi şifreleme değildir ve kötü güvenlik hiç yoktan kötüdür. Daha fazla bilgi: github.com/neovim/neovim/issues/694
rodrigoq

2
dgl.cx/2014/10/vim-blowfish meta-tldr: " geriye dönük uyumluluk nedenleriyle, Vim 7.4.399 [ groups.google.com/forum/#!msg/vim_dev/D8FyRd0EwlE/bkBOo-hzTzoJ] 'de düzeltildi yeni bir cryptmethod olmak, bu yüzden kullanın :set cm=blowfish2"
underscore_d

28

Kodunuzu Vim içinden oluşturun ve hata ayıklayın!

Yapılandırma

Gerçekten pek değil. MakefileGeçerli dizinde bir gerekir .

Derlemek

Vim olduğumuz süre içinde, yazın :makebir kabuk çağırmak ve program oluşturmak için. Çıktı kaydırıldığında endişelenmeyin; sadece basEnterVim'e dönmek için bittiğinde .

Sihir

Vim'e geri döndüğünüzde, aşağıdaki komutları kullanabilirsiniz:

  1. :cl hataları, uyarıları ve diğer mesajları listeler.
  2. :ccgeçerli hata / uyarı mesajını ekranın altında görüntüler ve rahatsız edici satıra atlar kodunuzdaki .
  3. :cc ninci atlarn iletiye .
  4. :cn sonraki mesaja ilerler.
  5. :cp önceki mesaja atlar.

Fazlası var; eğer ilgileniyorsanız, :help :ccVim içinden yazın .


1
sadece kod derlemekten daha fazlası ile çalışır. Yani, bir makefile içinde yazılan herhangi bir görev bunun için büyük bir kullanımdır.
Dwight Spencer

25

^ P ve ^ N

Önceki (^ P) veya sonraki (^ N) metni tamamlayın.

^ O ve ^ I

Önceki (^ O - "O" eski konum) veya sonraki (^ I - "I" hemen "O" yanında) gidin.

Arama yaparken, dosyaları düzenlerken vb. Bu "atlamalarda" ileri ve geri gezinebilirsiniz.

izler

Ma tuşuna basın (m işareti, a - işaret adı). Daha sonra konuma dönmek için `a yazın .


1
Wow, ^ O ve ^ I hakkında bilmiyordum: bu harika. :help jump-motionsHerkesin daha fazla bilgi istemesi durumunda cevabınıza vb. Eklemeye değer olabilir .
DrAl

ShowMarks kontrol vim.org/scripts/script.php?script_id=152 . Bir tampondaki tüm işaretlerinizin nerede ve ne olduğunu hatırlamanıza yardımcı olacaktır. \ mt
tester

^ P ve ^ N ... arasındaki farkı alamıyorum
lajarre

@lajarre karşıt yönde mevcut tamamlamalar listesinde
dolaşıyorlar

2
Son düzenlenmiş dosyayı tekrar düzenlemek istediğimi fark ettikten sonra Vim'i açarken sıklıkla ^ O ^ O kullanıyorum. Büyük zaman tasarrufu!
Patrick Oscity

24

Basın %imleç eşini bulmaya bir alıntı, parantez, destek veya omurganın açıkken.


20
İmleç bunlardan herhangi birinin üzerinde değilse, birine çarpana kadar sağa kayar.
Cyber ​​Oliveira

@ Léo: Bonus ipucu için teşekkürler!
Adam Liss

22

[Karakter] ( t) tarihine kadar . Bir aralığı kabul eden herhangi bir komut için kullanışlıdır. En sevdiğim, ct;ya ct)da sondaki noktalı virgül / kapanış parantezlerine kadar her şeyi silen ve ardından ekleme moduna geçiren.

Ayrıca Gve ggyararlıdır (Sırayla aşağı ve yukarı git).


burada en iyisi, bazıları da yararlı olsa da, ben zaten hepsini zaten biliyordum
Funkodebat

1
Ayrıca fbunun yerine bu karakter boyuncat [harekete geçecek] ; örneğin, imlecin bir işlev bağımsız değişkeninin başlangıcında olması, onu silecektir (elbette uygun dillerde). df,
Actorclavilis

t ve f, bir camelCase değişkeninin bir bölümünü düzenlemek için mükemmeldir. Örneğin, bir satırı çoğalttıysanız ve ilk önce Değişken olarak ikinci Değişkene değiştirmeniz gerekiyorsa, imlecinizi ilk Değişken'in başlangıcına konumlandırın, sonra ctV
Greg

1
T ve F de çalışır, ancak ters yönde.
Fede

20

^r^w komut modunda sözcüğü imlecin altına yapıştırmak için.

Grep veya replace komutlarını kullanırken gerçekten kullanışlıdır.


İstediğiniz tek kelimeyse, normal modda * imlecin altındaki kelimeyi arayacaktır.
idbrii

17

Ardından bir satır numarası ggyazdığınızda o satıra yönlendirilirsiniz.


31
: ardından satır numarası aynı yapar: 42 satır 42'ye gider
Anti Veeranna

12
Bir satır numarası ve ardından G yazmak aynı etkiye sahiptir.
Cyber ​​Oliveira

3
<number>go<number>dosyadaki th karakterine gider .
Actorclavilis

17

Keşke daha önce temel görsel blok modu şeylerini bilseydim. Vim'i başka bir şey için kullanmasanız bile, sadece bazı blok işlemleri için Vim'de bir dosya açmak büyük bir zaman tasarrufu olabilir. Bu tür şeyleri manuel olarak yaparak tonlarca zaman harcadığımdan eminim.

Örnek olarak sembolik sabit isimlerin listelerini sürekli olarak yeniden düzenlerken özellikle yararlı bulduğum örnekler:

Görsel Blok moduna girin ( Ctrl+ Qyerine Windows'ta + benim için Ctrl+V )

İstediğiniz bloğu vurgulamak için imleci hareket ettirin.

Ardından I whatever textbasınEsc metnin her satıra blokun önüne yerleştirilmesi için .

Yerine AkullanınI her satırda bloktan sonra eklenen metin bulunmalıdır.

Ayrıca - görsel bir seçimin kasasını değiştirmek sadece ~büyük bir zaman tasarrufu olabilir.

Ve elbette sadece sütunları da silmek d.


15

^ y , imlecin üzerindeki karakteri kopyalar.


6
... ve ^ E, imlecin altına karakteri ekleyecek
çok fazla php

benim için çalışmıyor, sadece bir imleci metnin başlangıcına taşır
Alex

14

q <letter> - bir makro kaydeder.

ve

@ <same-letter> - oynatır.

Bunlar, Vim'deki en yararlı komutlardır, çünkü bilgisayarın sizin için çok fazla iş yapmasını sağlayabilirsiniz ve hatta bir program veya herhangi bir şey yazmanız gerekmez.


qSadeleştirme kullanımı önemlidir, ancak kullanmanıza gerek yoktur: sadece arabellek komutunu adlandırılmış bir ara belleğe kaydedin "- örneğin, arabellek kullanarak a- "ad$...
Mei

@Mei qbir makro kaydeder; makrolar böylece, sadece metin değil, komutları içerebilir "ad$farklıdır qa.
Brian McCutchon

@Sortofabeginner Burada alakasız. "Ad $ komutu metni arabelleğe a koyar ve qa çalıştırır.
Mei

2
@Mei qaçalıştırmaz; qakaydeder ve @açalıştırır. Bir makroyu düz metin olarak yazabileceğiniz, abenzer bir şeyle kayıtta saklayabileceğiniz "ad$ve daha sonra çalıştırabileceğiniz doğrudur @a, ancak bu biraz daha fazla iştir. Kesme ve yapıştırma ve kaydetme ile çalıştırma arasında temel bir fark vardır.
Brian McCutchon

Doh! Bunu biliyordum. Düzeltme için teşekkürler
Mei

13

Sekmeleri kullanarak birden fazla dosya açma

:tabe filepath

Açık dosyalar arasında gezinme

gt and gT or :tabn and :tabp

Daha sonra açık dosyalar listenize geri dönebilmek için açık oturumu kaydedin

:mksession session_file_name.vim

Oluşturulan bir oturumu açma

vim -S session_file_name.vim

Tüm dosyaları bir kerede kapatın

:qa

Son zamanlarda öğrendiğim başka bir komut

autocmd

Bir olay üzerinde bir komut çalıştırmanıza izin verir, örneğin aşağıdaki gibi bir dosyayı kullanarak bir dosyayı kaydettiğinizde komut oluştur komutunu çalıştırabilirsiniz:

:autocmd BufWritePost *.cpp :make

12

qx tuş vuruşlarını kaydetmeye başlayacaktır. Hemen hemen her düzenleme görevini yapabilirsiniz ve Vim bunu hatırlar. Hit q Bitirdiğinizde tekrar basın @x tuş vuruşlarını oynatmak için. Bu, bir eşleme yazmak için çok karmaşık olan tekrarlayan düzenlemeler için mükemmeldir. X dışında bir karakter kullanarak birçok kayda sahip olabilirsiniz .


5
Ayrıca 'x' karakteri 'q' kayıt makrosu komutu ve adlandırılmış panolar ("x ...) arasında paylaşılır. Dosyanızın etrafında oturan makro snippet'lerini bırakıp adlandırılmış bir panoya kopyalayabilirsiniz (örn." Xyy) ) ve ardından oynatın (@x).
Cyber ​​Oliveira

Ve şimdiye kadar awesomist makro oluşturursanız, bu panoya 'let @x = ""' (makroyu "" içine koyarak) ile _vimrc'nize geçebilir ve sonsuza kadar kaydedebilirsiniz!
Kearns

11

Benim favorilerimden birinin yardım penceresini yeni bir sekmeye yerleştirdiğini söylemek zorundayım:

:tab help <help_topic>

Bu yeni bir sekmede yardım açar ve Vim sekmelerini seven biri olarak bu gülünç derecede faydalıdır.


2
Tamponlar vim'in sekmeleridir. Vim iş akışı tarafından daha iyi desteklenirler. Sekmelerin sadece vim'e eklendiğinden şüpheleniyorum çünkü çok fazla insan tamponları anlamadı.
still_dreaming_1

Tamam, bunu söyledikten hemen sonra, vim'de sekmeler için bir kullanım buldum. Sekme başına bir tampon kullanıyorsanız, tamponlar hakkında bilgi edinmeniz gerektiği doğrudur. Sekmelerin vim'de kullanılması amaçlanmamıştır. Çoğu gelişmiş vim kullanıcısı, sekmelerin çoğu programda kullanıldığı şekilde arabellekleri kullanır. Birçok kişi sekmelere vim'de düzen adı verilmesi gerektiğini düşünüyor. Çoğunlukla farklı sekmelerde farklı pencere koleksiyonları açmak içindir. Ayrıca, bir sekmede çok açık olan ve diğer sekmeyi diğer tüm arabellekleri görüntülemek için kullandığınız belirli bir arabellek olabilir.
still_dreaming_1

9

cw

Kelimeyi değiştir - imlecin altındaki sözcüğü siler ve yeni bir sözcük yazmak için ekleme moduna geçirir. Tabii ki bu diğer hareket tuşlarıyla da çalışır, böylece satırın sonuna geçmek için c $ gibi şeyler yapabilirsiniz .

f + karakteri

Geçerli satırdaki karakterin bir sonraki tekrarını bulur. Böylece geçerli satırdaki bir sonraki "t" ye kadar olan tüm metni seçmek için vft yapabilirsiniz . Bu başka bir hareket tuşu, bu yüzden diğer komutlarla da çalışır.


9

:b [any portion of a buffer name]tamponları değiştirmek için. İki tamponunuz varsa, "somefile1.txt" ve "someotherfile2.txt", ikincisine basitçe geçebilirsiniz ":b 2.t<enter>". Ayrıca, zorunlu olmasa da sekme tamamlamayı destekler.

Sekme tamamlanmasından bahsetmişken, ayar :set wildmode=full wildmenuda çok faydalıdır. Komut modu için tam sekme tamamlamanın yanı sıra, kullanıldığında tüm olası eşleşmeler için çok yararlı bir ncurses tarzı menü sağlar.


9

:% S, / arama / yerine

/Değiştirme için kalıpları ayırmak üzere (eğik çizgi) dışında başka karakterler kullanabilirsiniz . Bu şekilde dosya yollarının eğik çizgilerinden kaçmak zorunda kalmazsınız.


2
oh cehennem evet. Bunu biliyordum sed, ama yoktu vim. Daha fazla bilgi know
beerbajay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.