Cara efektif bekerja dengan banyak file di Vim


1100

Saya sudah mulai menggunakan Vim untuk mengembangkan skrip Perl dan mulai merasa sangat kuat.

Satu hal yang saya sukai adalah dapat membuka banyak file sekaligus dengan:

vi main.pl maintenance.pl

dan kemudian lompat di antara mereka dengan:

:n
:prev

dan lihat file mana yang terbuka dengan:

:args

Dan untuk menambahkan file, saya dapat mengatakan:

:n test.pl

yang saya harapkan kemudian akan ditambahkan ke daftar file saya, tetapi sebaliknya menghapus daftar file saya saat ini dan ketika saya mengetik :argssaya hanya test.plbuka.

Jadi bagaimana saya bisa menambah dan menghapus file dalam daftar args saya?


5
tmux ... gunakan vim di setiap panel
Tommy

4
@Tommy: dengan cara ini Anda tidak dapat menempel konten yang ditarik / dihapus di antara file (vims buffer). Jika hanya tersedia clipboard yang dapat membantu (lihat jawaban yang diterima: stackoverflow.com/questions/5532878/… )
ChristophS

1
:Nsepertinya cara yang lebih mudah untuk membuka file sebelumnya ...
Gert van den Berg

vimcasts.org/categories/the-argument-list ? VimCast benar-benar sangat direkomendasikan saat mempelajari vim.
mcepl

Jawaban:


1171

Mengapa tidak menggunakan tab (diperkenalkan pada Vim 7)? Anda dapat beralih di antara tab dengan :tabndan :tabp, Dengan :tabe <filepath>Anda dapat menambahkan tab baru; dan dengan biasa :qatau :wqAnda menutup tab. Jika Anda memetakan :tabndan :tabpke F7/ F8kunci Anda, Anda dapat dengan mudah beralih di antara file.

Jika ada tidak banyak file atau Anda tidak memiliki Vim 7 Anda juga dapat membagi layar Anda dalam beberapa file: :sp <filepath>. Kemudian Anda dapat beralih antara splitscreens dengan Ctrl+ Wdan kemudian tombol panah ke arah yang ingin Anda pindahkan (atau alih-alih tombol panah, wuntuk Wlayar splits berikutnya dan sebelumnya)


72
Untuk menyimpan dan menutup tab, Anda juga dapat menggunakan ZZalih-alih :wq(seperti yang biasanya disimpan dan ditutup)
Andreas Grech

40
Saya menggunakan paket vim-gnome di Ubuntu 10.10, dan saya bisa beralih di antara tab menggunakan Ctrl + PageUp dan Ctrl + PageDown. Saya tidak perlu mengkonfigurasi apa pun; itu default.
Joey Adams

268
Juga, dalam mode edit, gtpergi ke tab berikutnya, dan gTpergi ke tab sebelumnya.
Dean

40
Anda dapat melompat ke sembarang tab dengan menggunakan ngt, di mana n adalah indeks tab (dimulai dengan satu). Saya pikir ada opsi yang menampilkan indeks setiap tab di dekat nama file, tapi saya tidak tahu apa itu. Jika ada yang tahu, saya ingin mendengarnya.
void-pointer

81
Perhatikan juga bahwa Anda dapat menggunakan -pflag untuk membuka banyak file di tab dari baris perintah. Misalnya, gvim -p main.pl maintenance.plakan membuka dua file ini di tab.
Matthew Strawbridge

555

Daftar

Untuk melihat daftar buffer saat ini, saya menggunakan:

:ls

Pembukaan

Untuk membuka file baru, saya menggunakan

:e ../myFile.pl

dengan penambahan tab yang ditingkatkan (masukkan set wildmenuAnda .vimrc).

Catatan: Anda juga dapat menggunakan :findjalur pencarian yang akan dicari untuk Anda, tetapi Anda harus menyesuaikan jalur tersebut terlebih dahulu.


Beralih

Untuk beralih di antara semua file yang terbuka, saya menggunakan

:b myfile

dengan peningkatan tab yang ditingkatkan (masih set wildmenu)

Catatan: :b#memilih file yang terakhir dikunjungi, sehingga Anda dapat menggunakannya untuk beralih cepat antara dua file.


Menggunakan windows

Ctrl-W sdan Ctrl-W vuntuk membagi jendela saat ini secara horizontal dan vertikal. Anda juga dapat menggunakan :splitdan :vertical split( :spdan :vs)

Ctrl-W wuntuk beralih di antara jendela yang terbuka, dan Ctrl-W h( jatau katau l) untuk menavigasi melalui jendela yang terbuka.

Ctrl-W cuntuk menutup jendela saat ini, dan Ctrl-W ountuk menutup semua jendela kecuali yang sekarang.

Memulai vim dengan -oatau -Oflag akan membuka setiap file dalam pemisahannya sendiri.


Dengan semua ini saya tidak perlu tab di Vim, dan jari-jari saya menemukan buffer saya, bukan mata saya.

Catatan: jika Anda ingin semua file masuk ke instance Vim yang sama, mulai Vim dengan --remote-silentopsi.


4
Jika Anda bermain dengan banyak buffer, saya akan merekomendasikan LustyJuggler .
Arun M

1
Terima kasih telah membuat referensi cepat yang sangat bagus untuk perintah vim yang paling sering digunakan ketika bekerja dengan banyak file.
quanticle

9
:badalah perintah yang sangat kuat karena dapat menerima nomor penyangga dan nama penyangga sebagai argumen. Apa lagi? Ini juga mendukung penyelesaian tab pada bagian mana pun dari nama file. Katakanlah, Anda memiliki foo.txt terbuka di buffer 2, Anda dapat mengetik :b 2<Enter>atau :b foo.txtatau :b oo<Tab><Enter>mengedit file itu. Ya, yang terakhir akan menyelesaikan 'oo' menjadi 'foo.txt' saat Anda menekan <Tab>.
Susam Pal

21
Saya memiliki baris ini di vimrc saya: nnoremap gb :ls<cr>:b<space>. Ketika saya mengetik gbdalam mode perintah, itu mencantumkan buffer dan tipe terbuka saya :b , siap bagi saya untuk mulai mengetik nama / nomor buffer.
nkorth

5
Layak juga disebutkan bahwa :bakan menerima pertandingan substring selama itu jelas. Jadi jika Anda memiliki file yang terbuka foo, bardan baz, hanya :b zcukup untuk beralih Anda ke bazbuffer, dan :b ooatau :b oakan membawa Anda ke foopenyangga.
Soren Bjornstad

233
:ls

untuk daftar buffer terbuka

  • :bp buffer sebelumnya
  • :bn buffer selanjutnya
  • :bn( nangka) pindah ke buffer ke-n
  • :b <filename-part> dengan tab-key yang menyediakan pelengkapan otomatis (luar biasa !!)

Dalam beberapa versi vim, bndan bpsebenarnya bnextdan bpreviousmasing - masing. Tab lengkapi-otomatis sangat membantu dalam hal ini.

Atau ketika Anda berada dalam mode normal, gunakan ^untuk beralih ke file terakhir yang sedang Anda kerjakan.

Plus, Anda dapat menyimpan sesi vim

:mksession! ~/today.ses

Perintah di atas menyimpan buffer file terbuka dan pengaturan untuk ~/today.ses. Anda dapat memuat sesi itu dengan menggunakan

vim -S ~/today.ses

Tidak ada kesulitan mengingat di mana Anda tinggalkan kemarin. ;)


pergi ke buffer tertentu: N CTRL- ^
Tom Yang

8
@shyam, aku pikir aku mencintaimu! Entah bagaimana saya tidak pernah tahu pasti tentang perintah mksession, tetapi hari ini tiba-tiba saya memutuskan harus ada cara untuk menyimpan daftar file untuk dengan mudah membukanya. Ini bahkan lebih baik karena tampaknya menyimpan keadaan lengkap (pemisahan jendela, lokasi penyangga, dll). Jadi terima kasih!
Kasapo

Juga, gunakan "tanda untuk melompat ke tempat Anda berada di file terakhir kali.
Chromium

113

Untuk menambah argsdaftar:

:argadd

Untuk menghapus dari argsdaftar:

:argdelete

Dalam contoh Anda, Anda bisa menggunakan :argedittest.pl untuk menambahkan test.pl ke argsdaftar dan mengedit file dalam satu langkah.

:help args memberikan lebih banyak detail dan penggunaan tingkat lanjut


4
Ini benar-benar jawaban untuk pertanyaan yang diajukan, meskipun diberi judul jawaban lain sangat adil.
Soren Bjornstad

48

Saya menggunakan perintah buffer - :bn(buffer berikutnya), :bp(buffer sebelumnya) :buffers(daftar buffer terbuka) :b<n>(buffer terbuka n) :bd(hapus buffer). :e <filename>hanya akan terbuka ke buffer baru.


18
: lebih cepat dari: buffer
aehlke

42

Saya pikir Anda mungkin menggunakan perintah yang salah untuk melihat daftar file yang telah Anda buka.

Coba lakukan a :lsuntuk melihat daftar file yang telah Anda buka dan Anda akan melihat:

   1 %a   "./checkin.pl"            line 1
  2 #    "./grabakamailogs.pl"     line 1
  3      "./grabwmlogs.pl"         line 0
  etc.

Anda kemudian dapat memantulkan melalui file dengan merujuk pada mereka dengan nomor yang tercantum, misalnya: 3b

atau Anda dapat membagi layar Anda dengan memasukkan nomor tetapi menggunakan sb bukan hanya b.

Sebagai samping% merujuk ke file yang saat ini terlihat dan # merujuk ke file alternatif.

Anda dapat dengan mudah beralih di antara dua file ini dengan menekan Ctrl Shift 6

Sunting: seperti :lsyang dapat Anda gunakan :reguntuk melihat konten register Anda saat ini termasuk 0-9 register yang berisi apa yang telah Anda hapus. Ini sangat berguna jika Anda ingin menggunakan kembali beberapa teks yang sebelumnya Anda hapus.


2
Senang melihat di samping informasi terkait seperti% dan #. +1
Ashish

35

Vim (tetapi bukan Vi asli!) Memiliki tab yang menurut saya (dalam banyak konteks) lebih unggul daripada buffer. Anda dapat mengatakan :tabe [filename]untuk membuka file di tab baru. Bersepeda antar tab dilakukan dengan mengklik tab atau dengan kombinasi tombol [ n ] gtdan gT. Vim grafis bahkan memiliki tab grafis.


1
Terima kasih, kedengarannya hebat, tapi sayangnya kami hanya menginstal VIM 6.1 di server.
Edward Tanguay

1
Tab sangat berguna dengan wildcard: vim -p dir/*. Ukuran tab maksimum adalah 10, tetapi Anda dapat mengubahnya dalam ~/.vimrcpengaturan tabpagemaxke beberapa nilai lain.
Campa

27

Banyak jawaban di sini! Apa yang saya gunakan tanpa menciptakan kembali roda - plugin paling terkenal (yang tidak akan mati dalam waktu dekat dan digunakan oleh banyak orang) menjadi sangat cepat dan culun.

  • ctrlpvim / ctrlp.vim - untuk menemukan file dengan pencarian fuzzy nama berdasarkan lokasi atau hanya namanya
  • jlanzarotta / bufexplorer - untuk menelusuri buffer yang dibuka (ketika Anda tidak ingat berapa banyak file yang Anda buka dan modifikasi baru-baru ini dan Anda tidak ingat di mana mereka berada, mungkin karena Anda mencari mereka dengan Ag)
  • rking / ag.vim untuk mencari file sehubungan dengan gitignore
  • scrooloose / nerdtree untuk melihat struktur direktori, mencari, menambah / menghapus / memodifikasi file

EDIT: Baru-baru ini saya telah menggunakan dyng / ctrlsf.vim untuk mencari dengan tampilan kontekstual (seperti pencarian Sublime) dan saya mengganti mesin dari ag ke ripgrep . Performa luar biasa.

EDIT2: Bersama dengan CtrlSF Anda dapat menggunakan mg979 / vim-visual-multi , membuat perubahan ke beberapa file sekaligus dan kemudian menyimpannya dalam sekali jalan.


2
ctrlp telah pindah, dan sekarang ditemukan di ctrlpvim / ctrlp.vim
Dave

1
Ini adalah jawaban yang benar! Mengapa tidak memiliki lebih banyak suara positif?
Thomas Möbius

2
Itu tidak memiliki lebih banyak suara positif karena pertanyaan diajukan pada tahun 2008. :)
burnettk

persis. Saya tidak bisa membayangkan vim dalam pengaturan dev tanpa plugin itu.
Edgar Alloro

25

Hal-hal seperti :edan :baddhanya akan menerima SATU argumen, karena itu yang berikut akan gagal

:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*

Jika Anda ingin menambahkan beberapa file dari dalam vim, gunakan arga[dd]

:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*

21

Beberapa jawaban di utas ini menyarankan menggunakan tab dan lainnya menyarankan menggunakan buffer untuk mencapai hal yang sama. Tab dan Buffer berbeda. Saya sangat menyarankan Anda membaca artikel ini " Vim Tab kegilaan - Buffer vs Tab ".

Berikut ringkasan bagus yang saya tarik dari artikel ini:

Ringkasan:

  • Buffer adalah teks dalam memori dari suatu file.
  • Jendela adalah viewport pada buffer.
  • Halaman tab adalah kumpulan windows.

2
Anda mendapatkan ringkasan itu dengan mengetikkan :help windowVim
icc97

19

Saat menggunakan banyak file dalam vim, saya menggunakan sebagian besar perintah ini (dengan ~ 350 file terbuka):

  • :b <partial filename><tab> (lompat ke buffer)
  • :bw (buffer menghapus, menghapus buffer)
  • :e <file path> (edit, buka buffer baru>
  • pltags - memungkinkan lompat ke definisi subrutin / metode

2
350 file !!! Itu mengesankan. bagaimana Anda menemukan buffer yang tepat untuk melompat? Apakah Anda pernah melakukan split?
Brian O'Dell

3
@ BrianO'Dell nilai :b <partial filename><tab>tambah set wildmenudalam .vimrckarya Anda dengan baik ketika Anda punya banyak buffer terbuka. Kemudian Anda hanya mencocokkan sebagian dan menggulir yang ditemukannya. Di editor lain yang layak Anda memiliki fuzzy finding tetapi biasanya Anda tidak dapat membatasi fuzzy finding hanya pada file yang telah Anda buka.
icc97

17

Menambahkan jawaban lain karena ini tidak tercakup oleh jawaban mana pun

Untuk mengubah semua buffer untuk tabdilihat.

 :tab sball

akan membuka semua buffer ke tampilan tab. Kemudian kita bisa menggunakan perintah tab terkait

gt or :tabn           "    go to next tab
gT or :tabp or :tabN  "    go to previous tab

detail di :help tab-page-commands.

Kita dapat menginstruksikan vim untuk membuka, seperti tampilan tab, beberapa file dengan vim -p file1 file2. alias vim='vim -p'akan berguna.
Hal yang sama juga dapat dicapai dengan mengikuti autocommand di~/.vimrc

 au VimEnter * if !&diff | tab all | tabfirst | endif

Pokoknya untuk menjawab pertanyaan: Untuk menambah daftar arg: arga file,

Untuk menghapus dari daftar arg: argd pattern

Lebih lanjut di :help arglist


16

Anda mungkin ingin menggunakan tanda global Vim .

Dengan cara ini Anda dapat dengan cepat memantul di antara file, dan bahkan ke lokasi yang ditandai di file. Juga, perintah kuncinya pendek: 'C membawa saya ke kode yang sedang saya kerjakan, 'T membawa saya ke unit test yang sedang saya kerjakan.

Saat Anda mengubah tempat, mengatur ulang tanda juga cepat: mC menandai tempat kode baru, mT menandai tempat uji baru.


12

Saya menggunakan file .vimrc yang sama untuk gVim dan baris perintah Vim. Saya cenderung menggunakan tab di gVim dan buffer di baris perintah Vim, jadi saya mengatur .vimrc saya agar lebih mudah bekerja dengan keduanya:

" Movement between tabs OR buffers
nnoremap L :call MyNext()<CR>
nnoremap H :call MyPrev()<CR>

" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
    if exists( '*tabpagenr' ) && tabpagenr('$') != 1
        " Tab support && tabs open
        normal gt
    else
        " No tab support, or no tabs open
        execute ":bnext"
    endif
endfunction
function! MyPrev()
    if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
        " Tab support && tabs open
        normal gT
    else
        " No tab support, or no tabs open
        execute ":bprev"
    endif
endfunction

Ini mengacaukan pemetaan yang ada untuk Hdan L, tetapi itu membuat pergantian file sangat cepat dan mudah. Tekan saja Huntuk selanjutnya dan Lsebelumnya; apakah Anda menggunakan tab atau buffer, Anda akan mendapatkan hasil yang diinginkan.


1
Saya suka pemetaan ini. Coba juga Ctrl-H, Ctrl-L. Saya mengatur Firefox dan terminal gnome dengan pemetaan yang sama. Sangat menyenangkan memiliki pintasan tombol tab yang konsisten.
cmcginty

4
gunakan kunci pemimpin Anda alih-alih ctrl untuk menghindari
mengganggu

10

Jika Anda akan menggunakan beberapa buffer, saya pikir hal yang paling penting adalah untuk menyembunyikannya sehingga itu akan memungkinkan Anda beralih buffer bahkan jika Anda memiliki perubahan yang belum disimpan di yang Anda tinggalkan.


9

Jika hanya menggunakan perintah built-in vim , yang terbaik yang pernah saya lihat untuk beralih di antara beberapa buffer adalah ini:

nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

Secara sempurna menggabungkan keduanya :lsdan :bperintah - daftar semua buffer yang dibuka dan menunggu Anda untuk memasukkan perintah untuk beralih buffer.

Diberikan pemetaan di atas di vimrc, setelah Anda mengetik <Leader>f,

  • Semua buffer terbuka ditampilkan
  • Kamu bisa:
    • Ketik 23untuk menuju ke buffer 23,
    • Ketik #untuk menuju ke buffer alternatif / MRU,
    • Ketikkan sebagian nama file, lalu ketik <Tab>, atau <C-i>untuk pelengkapan otomatis,
    • Atau hanya <CR>atau <Esc>tetap pada buffer saat ini

Cuplikan dari output untuk pemetaan kunci di atas adalah:

:set nomore|:ls|:set more
  1  h    "script.py"    line 1
  2 #h  + "file1.txt"    line 6  -- '#' for alternative buffer
  3 %a    "README.md"    line 17 -- '%' for current buffer
  4       "file3.txt"    line 0  -- line 0 for hasn't switched to
  5     + "/etc/passwd"  line 42 -- '+' for modified
:b '<Cursor> here'

Dalam cuplikan di atas:

  • Kolom kedua: %auntuk saat ini, huntuk disembunyikan,# untuk sebelumnya, kosong untuk belum beralih ke.
  • Kolom ketiga: +untuk dimodifikasi.

Juga, saya sangat menyarankan set hidden. Lihat :help 'hidden'.


Ini ide yang bagus! Saya telah menggunakan :bdan :lsbanyak tetapi secara mandiri. Saya pikir ini menjadi kurang berguna ketika Anda memiliki lebih dari satu nilai buffer, tetapi Anda masih bisa kembali ke:b
icc97

Senang melihatnya membantu. Bersulang! :)
qeatzy

Dari wikia Vim ini , Anda dapat mempersingkatnya menjadi sedikit nnoremap <leader>f :ls<cr>:b<space>, yang mungkin mengenai masalah dengan perintah 'lebih'
icc97

Ya, cara itu bekerja dengan sempurna jika lebih sedikit file yang terbuka (kasus penggunaan biasa). set morehal-hal hanya membuat perbedaan ketika ada banyak file terbuka (lebih dari satu halaman), misalnya vim /usr/include/*, meskipun kurang bermanfaat.
qeatzy

8

Saya menggunakan berikut ini, ini memberi Anda banyak fitur yang Anda harapkan di editor lain seperti Sublime Text / Textmate

  1. Gunakan buffer bukan 'halaman tab'. Buffer adalah konsep yang sama dengan tab di hampir semua editor lainnya.
  2. Jika Anda ingin tampilan yang sama memiliki tab Anda dapat menggunakan vim-maskapai Plugin dengan pengaturan berikut dalam Anda .vimrc: let g:airline#extensions#tabline#enabled = 1. Ini secara otomatis menampilkan semua buffer sebagai header tab ketika Anda tidak memiliki halaman tab dibuka
  3. Gunakan vim-unmusik Tim Pope yang memberi [bdan ]buntuk masing-masing pindah ke buffer sebelumnya / berikutnya (ditambah sejumlah besar barang lainnya)
  4. Dimiliki set wildmenudi .vimrckemudian ketika Anda mengetik :b <file part>+ Tabuntuk buffer Anda akan mendapatkan daftar kemungkinan buffer yang dapat Anda gunakan panah kiri / kanan untuk menggulir
  5. Gunakan plugin obsesi vim Tim Pope untuk menyimpan sesi yang bermain baik dengan maskapai (saya punya banyak kesulitan dengan sesi dan plugin )
  6. Gunakan plugin vim-cuka Tim Pope . Ini berfungsi dengan asli :Exploretetapi membuatnya lebih mudah untuk bekerja dengannya. Anda cukup mengetik -untuk membuka explorer, yang merupakan kunci yang sama untuk naik direktori di explorer. Membuat navigasi lebih cepat (namun dengan fzf saya jarang menggunakan ini)
  7. fzf (yang dapat diinstal sebagai plugin vim) juga merupakan fuzzy finder yang sangat kuat yang dapat Anda gunakan untuk mencari file (dan buffer juga). fzf juga bermain dengan sangat baik dengan fd (versi find yang lebih cepat)
  8. Gunakan Ripgrep dengan vim-ripgrep untuk mencari melalui basis kode Anda dan kemudian Anda dapat menggunakan :cdopada hasil untuk melakukan pencarian dan penggantian

fzf dan fzf-vim mengubah hidup saya, tidak cukup merekomendasikannya. Ini juga bekerja dengan sangat baik di windows, bahkan di konsol untuk mencari file fuzzy. Di windows gunakan ripgrep (rg) backend, yang menurut pengalaman saya mengungguli alat find / grep lainnya (seperti silversearcher atau de default windows menemukan bahwa fzf menggunakan iirc). Anda dapat menggunakannya untuk mencari di seluruh daftar item: file yang paling baru digunakan, buffer yang saat ini dibuka, baris dalam buffer saat ini, baris dalam basis kode (cwd), tag, .. Anda dapat dengan mudah memprogram pencarian fuzzy daftar Anda sendiri. Sangat baik! (Saya datang dari ctrl-p dan tidak pernah melihat ke belakang)
Emile Vrijdags

7

Cara saya untuk bekerja secara efektif dengan banyak file adalah dengan menggunakan tmux.

Ini memungkinkan Anda untuk membagi jendela secara vertikal dan horizontal, seperti pada:

masukkan deskripsi gambar di sini

Saya memilikinya bekerja dengan cara ini pada mesin mac dan linux saya dan saya merasa lebih baik daripada mekanisme switching window pane asli yang disediakan (pada Mac). Saya menemukan peralihan lebih mudah dan hanya dengan tmux saya sudah bisa mendapatkan 'halaman baru di direktori saat ini yang sama' bekerja di mac saya (terlepas dari kenyataan bahwa tampaknya ada opsi untuk membuka panel baru di direktori yang sama) yang bagian yang sangat penting. Panel baru instan di lokasi saat ini sangat berguna. Metode yang melakukan panel baru dengan kombo kunci yang sama untuk kedua OS sangat penting bagi saya dan bonus untuk semua untuk kompatibilitas pribadi di masa depan. Selain dari beberapa panel tmux, saya juga mencoba menggunakan beberapa tab, misalnyamasukkan deskripsi gambar di sini dan beberapa jendela baru, misalnyamasukkan deskripsi gambar di sinidan akhirnya saya menemukan bahwa beberapa panel tmux menjadi yang paling berguna bagi saya. Saya sangat 'visual' dan suka menjaga berbagai konteks saya tepat di depan saya, terhubung bersama sebagai panel.

tmux juga mendukung panel horisontal dan vertikal yang lebih tua screentidak (meskipun iterm2 mac tampaknya mendukungnya, tapi sekali lagi, pengaturan direktori saat ini tidak bekerja untuk saya). tmux 1.8


1
Saya harus tertawa ketika saya melihat contoh buatan Anda dari "beberapa jendela". Saya harap tidak ada yang bekerja seperti itu :-) Pokoknya, saya menggunakan tiling wm yang bahkan lebih baik (saya beralih dari tmux ke i3wm). Hanya untuk melengkapi jawaban Anda.
lzap

1
Tmux luar biasa dan saya menggunakan pendekatan ini untuk waktu yang lama, tetapi itu membuat navigasi dan menyalin dan menempel antara dua file lebih sulit.
neallred

1
Saya biasa melakukan ini, tetapi memiliki beberapa buffer vim lebih unggul ketika Anda perlu mencabut / menempel
Titou

3

Saya menggunakan baris perintah dan git banyak, jadi saya punya alias ini di bashrc saya:

alias gvim="gvim --servername \$(git rev-parse --show-toplevel || echo 'default') --remote-tab"

Ini akan membuka setiap file baru di tab baru di jendela yang ada dan akan membuat satu jendela untuk setiap repositori git. Jadi jika Anda membuka dua file dari repo A, dan 3 file dari repo B, Anda akan berakhir dengan dua jendela, satu untuk repo A dengan dua tab dan satu untuk repo B dengan tiga tab.

Jika file yang Anda buka tidak terkandung dalam git repo, ia akan menuju ke jendela default.

Untuk beralih di antara tab, saya menggunakan pemetaan ini:

nmap <C-p> :tabprevious<CR>
nmap <C-n> :tabnext<CR>

Untuk membuka banyak file sekaligus Anda harus menggabungkan ini dengan salah satu solusi lain.


3

Saya menggunakan beberapa buffer yang disembunyikan di ~/.vimrcfile saya .

Script mini-buffer explorer juga bagus untuk mendapatkan daftar buffer yang bagus. Kemudian :b1atau :b2... untuk pergi ke buffer yang sesuai atau menggunakan mini-buffer explorer dan tab melalui buffer.


2

cobalah peta berikut untuk kenyamanan mengedit banyak file

"pisahkan jendela

nmap <leader>sh :leftabove vnew<CR>

nmap <leader>sl :rightbelow vnew<CR>

nmap <leader>sk :leftabove new<CR>

nmap <leader>sj :rightbelow new<CR>

"Bergerak di sekitar

nmap <C-j> <C-w>j

nmap <C-k> <C-w>k

nmap <C-l> <C-w>l

nmap <C-h> <C-w>h


2

Saya membuat video yang sangat sederhana yang menunjukkan alur kerja yang saya gunakan. Pada dasarnya saya menggunakan plugin Ctrl-P Vim, dan saya memetakan navigasi buffer ke tombol Enter.

Dengan cara ini saya dapat menekan Enter dalam mode normal, lihat daftar file yang terbuka (yang muncul di jendela kecil baru di bagian bawah layar), pilih file yang ingin saya edit dan tekan Enter lagi. Untuk mencari dengan cepat melalui banyak file yang terbuka, cukup ketikkan bagian dari nama file, pilih file dan tekan Enter.

Saya tidak punya banyak file terbuka di video, tetapi itu menjadi sangat membantu ketika Anda mulai memiliki banyak dari mereka.

Karena plugin mengurutkan buffer menggunakan pemesanan MRU, Anda cukup menekan Enter dua kali dan melompat ke file terbaru yang sedang Anda edit.

Setelah plugin diinstal, satu-satunya konfigurasi yang Anda butuhkan adalah:

nmap <CR> :CtrlPBuffer<CR>

Tentu saja Anda dapat memetakannya ke kunci yang berbeda, tetapi saya menemukan pemetaan untuk masuk sangat berguna.


2

Saya sarankan menggunakan plugin

NERDtree

Inilah tautan github dengan instruksi.

Nerdtree

Saya menggunakan vim-plug sebagai manajer plugin, tetapi Anda dapat menggunakan Vundle juga.

vim-plug

Vundle


2

Di banyak pengguna vim saya dan lainnya, opsi terbaik adalah,

  • Buka file menggunakan,

: e file_name.extension

Dan kemudian cukup Ctrl + 6 untuk mengubah ke buffer terakhir. Atau, Anda selalu dapat menekan

: ls untuk membuat daftar buffer dan kemudian mengubah buffer menggunakan b diikuti oleh nomor buffer.

  • Kami membuat pemisahan vertikal atau horizontal menggunakan

: vsp untuk pemisahan vertikal

: sp untuk pemisahan horizontal

Dan kemudian <C-W><C-H/K/L/j>untuk mengubah pembagian kerja.

Anda dapat mengedit file dalam jumlah berapa pun.


Harap edit jawaban Anda untuk memastikannya meningkatkan jawaban lain yang sudah ada dalam pertanyaan ini.
hongsy

1

Ketika saya mulai menggunakan VIM, saya tidak menyadari bahwa tab seharusnya digunakan sebagai tata letak jendela yang berbeda, dan penyangga berperan untuk beberapa pengeditan / pengalihan file antara satu sama lain. Sebenarnya di tab awal bahkan tidak ada sebelum v7.0 dan saya baru saja membuka satu VIM di dalam terminal terminal (saya menggunakan gnome-terminal saat ini), dan beralih di antara tab menggunakan alt + angka, karena saya pikir menggunakan perintah seperti : buffer,: bn dan: bp terlalu banyak untukku. Ketika VIM 7.0 dirilis, saya merasa lebih mudah untuk mengatur banyak file dan beralih ke sana, tetapi baru-baru ini saya baru menyadari bahwa buffer harus selalu menjadi jalan yang harus dilalui, kecuali satu hal: Anda perlu mengkonfigurasinya untuk membuatnya berfungsi dengan benar.

Jadi saya mencoba vim-airline dan mengaktifkan buffer bar seperti tab di atas visual, tetapi grafis mengalami masalah dengan iTerm2 saya, jadi saya mencoba beberapa yang lain dan sepertinya MBE bekerja yang terbaik untuk saya. Saya juga mengatur shift + h / l sebagai pintasan, karena yang asli (pindah ke kepala / ekor halaman saat ini) tidak terlalu berguna bagi saya.

map <S-h> :bprev<Return>
map <S-l> :bnext<Return>

Tampaknya lebih mudah daripada gt dan gT, dan: e lebih mudah daripada: tabnew juga. Saya menemukan: bd tidak senyaman: q though (MBE mengalami masalah dengan itu) tapi saya bisa hidup dengan semua file dalam buffer saya pikir.



0

Sebagian besar jawaban di utas ini menggunakan perintah polos vim yang tentu saja baik-baik saja tapi saya pikir saya akan memberikan jawaban yang luas menggunakan kombinasi plugins dan fungsi yang saya temukan sangat berguna (setidaknya beberapa tips ini berasal dari file Gary Bernhardt tips navigasi ):

  1. Untuk beralih di antara dua file terakhir cukup tekan <leader>dua kali. Saya sarankan menetapkan <leader>untuk bilah spasi:

    nnoremap <leader><leader> <c-^>
    
  2. Untuk bergerak cepat di sekitar proyek, jawabannya adalah solusi pencocokan kabur seperti CtrlP . Saya mengikatnya <leader>auntuk akses cepat.

  3. Dalam hal ini saya ingin melihat representasi visual dari buffer yang saat ini terbuka, saya menggunakan plugin BufExplorer . Sederhana tetapi efektif.

  4. Jika saya ingin menelusuri di sekitar sistem file saya akan menggunakan baris perintah atau utilitas eksternal (Quicklsilver, Afred dll) tetapi untuk melihat struktur proyek saat ini NERD Tree adalah klasik. Jangan gunakan ini sebagai pengganti 2metode pencarian file utama Anda. Ini akan sangat memperlambat Anda. Saya menggunakan penjilidan <leader>ff.

Ini harus cukup untuk menemukan dan membuka file. Dari sana tentu saja menggunakan perpecahan horizontal dan vertikal. Mengenai pemisahan saya menemukan fungsi-fungsi ini sangat berguna:

  1. Buka pemisahan baru di area yang lebih kecil ketika tidak ada cukup ruang dan perluas navigasi. Rujuk di sini untuk komentar tentang apa tepatnya yang dilakukannya:

    set winwidth=84
    set winheight=5
    set winminheight=5
    set winheight=999
    
    nnoremap <C-w>v :111vs<CR>
    nnoremap <C-w>s :rightbelow split<CR>
    set splitright
    
  2. Pindah dari split ke split dengan mudah:

    nnoremap <C-J> <C-W><C-J>
    nnoremap <C-K> <C-W><C-K>
    nnoremap <C-L> <C-W><C-L>
    nnoremap <C-H> <C-W><C-H>
    

0

Anda dapat menjadi gila mutlak dan alias vimuntuk vim -pdengan menambahkan di Anda .bashrc:

alias vim="vim -p"

Ini akan menghasilkan membuka banyak file dari shell di tab, tanpa harus memohon :tab balldari dalam vim sesudahnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.