VIM'de birden fazla dosyayı nasıl düzenleyebilirim?


Yanıtlar:


170

Her şeyden önce, kısa bir öğretici de dahil olmak üzere kendi kendine yardım konularının bir listesi için vim'e girebilir :(iki nokta üst üste) ve sonra yardım alabilirsiniz . Konular listesinde imlecinizi ilgi konusu konunun üzerine getirin ve ardından tuşuna basın , o konu açılacaktır.help:helpctrl]

Başlamak için iyi bir yer

|usr_07.txt|  Editing more than one file

Tamam, cevabınıza.

Bir dosya listesiyle vim başlattıktan sonra, kısa bir süre girerek :nextveya bir sonraki dosyaya geçebilirsiniz :n. :wnextgeçerli değişiklikleri yazmak için kısa ve sonra bir sonraki dosyaya gidin.

Orada benzer bir seviyededir :previous, :wpreviousve :Next. (Not :piçin kısaltmadır :print. Kestirme için :previousolan :prevya da :N.)

Nerede olduğunuzu görmek için dosya listesine girin :argsve düzenlenmekte olan dosya []parantez içinde görünecektir .

Örnek:

vim foo.txt bar.txt
:args

sonuç:

[foo.txt] bar.txt

24
: wn, wnext dosyasının kısa biçimidir.
4'te Kowh

Bunları da yapabilirsiniz: ilk dosyaya geri dönmek için geri. : e # 2 dosya arasında geçiş yapar. : n! yazmadan bir sonraki dosyaya gider. Ayrıca bakınız: autowrite'ı ayarlayın.
Sasquiha

4
Birden fazla tampon / pencere / sekme ile ilgili olarak ayrıca StackOverflow's'a bakın. Vim'de birden fazla dosyayla nasıl etkili bir şekilde çalışılır? ve tampon gibi Vim'ın sekmeleri kullanma .
mmoya

1
Bölüm 22 "Düzenlenecek dosyayı bulma" da çok faydalı buldum. İstediğiniz dosyaları düzenlemek için dizin gezginini kullanmaya devam eder.
Harry Moreno

: harika biri.
rammayur

54

vim açıkken başka bir dosyayı açabilir :tabe filenameve yazdığınız diğer dosyaya geçebilir :tabnveya :tabpbuna göre sonraki ve önceki için kullanabilirsiniz.

GT ve gt klavye kısayolları düzenleme modunda değilken sekmeleri değiştirmek için de kullanılabilir (yani, ekleme, değiştirme vb modlarında değil). Bazı sistemlerde Ctrl+ Alt+ Page Upve Ctrl+ Alt+ Page Downsekme değiştirmeye de izin verir, ancak bu her zaman işe yaramaz (örneğin, OS X terminalinde 'kutudan çıkar' çalışmaz).

Ve vim uygulamasının üstünde dosya adını görebilirsiniz.


16
Bu. İle sekmelerde Ayrıca açık dosyaları:vim -p file1 file2
Şimdi Değil

Şaşırttın! Bu kadar uzun zamandır kullanmamama rağmen, buna asla rastlamamıştım. Bu her şeyi değiştirir .
me_ve

Sekmelerin birden fazla dosyayla çalışması amaçlanmadığını unutmayın. Birden çok düzende çalışmak üzere tasarlanmıştır . Bkz makale .
patryk.beza 14:15

5
Bir kenara: Eğer zaten vim kullanıyorsanız ve başka bir dosya eklemek istiyorsanız, şunu kullanabilirsiniz: :argadd filenameve sonra :nextona. Aynı şekilde, :argdel filenamedüzenlemedeki dosyalardan birini kaldırmak için de kullanabilirsiniz .
Luv2code

36

Tamponlar arasında geçiş yapmak için kullanılan komutlar:

:bf            # Go to first file.
:bl            # Go to last file
:bn            # Go to next file.
:bp            # Go to previous file.
:bw            # Close file.

:help buffer daha fazla bilgi bulmak için

Dosya adı kullanımını bilmek için Ctrl+ G, :fileveya:f


1
:bwdosyayı kapat haha. :bwYalnızca ne yaptığınızı biliyorsanız, kullanmanız gerektiğini söylediği yerdeki yardımı okumayı unutmayın . Çok da önemli değil, ancak dosya hakkındaki tüm işaretleri ve bilgileri silmek istemediğiniz sürece, daha iyi bir kullanım :bdya da :qnormal bir insan gibi
Dylan

1
:bwMerak ediyorsanız hakkında daha fazla bilgi : vi.stackexchange.com/questions/2212/…
wisbucky

25

Verilen cevapların dışında bir diğer seçenek ise pencereyi şu şekilde bölmektir:

:sp
:vsp

:vspdikey bölme içindir. Ardından Ctrl+W <ARROW_KEYS>bölmelerde hareket etmek için kullanın .


4
Sen kullanabilirsiniz :vsyerine:vsp
Khaja Minhajuddin

2
Veya sadece Ctrl+W, vdikey ayırma ve Ctrl+W, syatay ayırma için bile .
Ruslan

1
Yıllardır kullanıyorum CTRL+Wve son zamanlarda web sayfalarında çok fazla VI düzenleme yapıyorum. Her seferinde komutu bile düşünmeden yazıyorum ve ... whammmm ... browser sekmesi GONE! Unutmaya devam ediyorum. Gerçekten yeni bir kısayol öğrenmem gerekiyor.
Jeach

13
:n -> Move to next file
:N -> Move to previous file

10

Benzer bir soruyu superuser'da da sordum.

"Farklı bash pencereleri ve VI ile açılan dosyalar arasında kopyalayıp yapıştırma nasıl yapılır?"

Sorumun cevabı yapamazsınız, ancak VIM'in :splitkomutunu kullanarak tek bir bash penceresinde iki dosyayı açabilirsiniz :

  1. İle bir dosya açın $ vim file1, VIM içinde :split file2komutu kullanarak ikinci bir dosya açın .
  2. Veya, $ vim -o file1 file2bash kullanın .
  3. Dosyalar arasında geçiş - Etkin dosyayı geçiş - VIM ile ctrl- w ctrl- w.
  4. Daha sonra örnek bir işlem, dosya1'deki kopya (veya yank) yy, anahtar (3), daha sonra piçeriği dosya2'ye yapıştırın (veya yapıştırın) .
  5. Her iki pencere de aktif olduğunda her şey normaldir, bu nedenle :qçıkar ve :q!zorla çıkar.

Benim bash siyah ve beyaz, bu nedenle her ekranın dosya adı, burada belirtilen dosya adıyla tersine çevrilmiş bir 'seçili' çizgi şeklinde gösteriliyor.

Woot!


6

Birden fazla dosyayı düzenlemenin en uygun yöntemini sekmeler kullanmaktır. Aşağıdaki gibi komut satırı üzerinden birden fazla dosyayı ayrı sekmelerde açabilirsiniz:

vim -p file1.txt file2.txt

Veya zaten açık bir vim varsa, aşağıdaki gibi yeni bir sekmede yeni bir dosyayı açabilirsiniz:

:tabe file2.txt

Sekmeleri açtıktan sonra gt, bir sonraki sekmeyi gTgörüntülemek ve önceki sekmeyi görüntülemek için kullanın.

Ayrıca birinci sekmeye 1gt, ikinci sekmeyle 2gtvb. Atlayabilirsiniz.

Kullanarak sekmeleri kapatabilirsiniz. :tabc

Sonunda Geçerli sekmeyi taşıyabilirsiniz nile inci konuma :ntabmnereye nherhangi bir sayı veya daha büyük eşittir 0.


6
argadd a/b c/d e/f

argadd ...tüm dosyaları argümanlara ve ayrıca :ls/ :buffersve düzenlemenize izin verecek şekilde ekleyecektir .


:h arglsit& :h argedit& Bkz.:h argsd


Ayrıca, yalnızca bazı argümanlarla belirli eylemleri gerçekleştirebilir ve argümanlarınızı :argdo ...baştan sona yeniden başlatabilirsiniz :argsd*.


0

Bunu yapmanın çok yolu var. İlki, belki daha az kullanışlı olanı, vimdüzenlemek istediğiniz dosyaları çağırmaktır - oluşturun:

vim first_file second_file ...

İki dosyayı iki arabellekte çağırır. Bir dosyadan diğerine geçmek için lütfen :nve tuşlarını kullanın :N. Düzenlemekte olduğunuz dosyaları listelemek için :args, işi yapacak. :help bufferbu konuda size daha fazla yardımcı olacaktır.


Bu sorunuzu cevaplamalıdır. Ama işte daha fazla bilgi:

Konsol ekranınızı vim kullanarak bölerek dosyalarınızı daha rahat bir şekilde düzenlemenin bir yolu vardır . Bunu yapmak için, vim kullanırken :split( :sp) veya :vsplit( :vs) ile iki çerçeve açın . Ardından bu karelerde + > + kombinasyonunu kullanarak gezinin . Ayrıca, aynı + + ok veya anahtar ( , , ya da bir sonraki çerçeveye karşılık gelen). Bu yapıldığında, istediğiniz dosyayı düzenleyin . bu konuda size daha fazla yardımcı olacaktır.CtrlWCtrlWCtrlWHJKL:e file_name:help opening-window

Şimdi, dosyalar arasındaki farkları görmek istiyorsanız, -dargümanı kullanın veya karşılık gelen dosyalarla vimdiff programını arayın (aynıdır). :help diffbu konuda size daha fazla yardımcı olacaktır.

vim -d first_file second_file ...

Bazı sorunlarınız varsa lütfen bana bildirin.


0

Birden fazla dosyayı düzenlemek için hem yatay hem de dikey olarak bölünmüş pencereler kullanmayı seviyorum.

Bu pencereleri daha kolay yönetmek için tmux kullanıyorum

https://tmux.github.io/ "Terminal çoklayıcı nedir? Bir terminaldeki birkaç program arasında kolayca geçiş yapmanıza, onları ayırmaya (arka planda çalışmaya devam ederler) ve farklı bir terminale tekrar takmanıza olanak tanır. çok daha fazla. Kılavuza bakın. "

Örnek: Dosyalara bakmak veya sağda testler yapmak, solda test ve kaynak dosyaları düzenlemek: görüntü tanımını buraya girin


0

:e #(filename) açılan iki dosya arasında geçiş yapmak için

:p önceki dosya için

:n sonraki dosya için


U & L'ye hoş geldiniz, bu yıllar önce yayınlanan diğer cevaplara bir şey eklemek pek mümkün değil.
Archemar
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.