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 :args
saya hanya test.pl
buka.
Jadi bagaimana saya bisa menambah dan menghapus file dalam daftar args saya?
:N
sepertinya cara yang lebih mudah untuk membuka file sebelumnya ...Jawaban:
Mengapa tidak menggunakan tab (diperkenalkan pada Vim 7)? Anda dapat beralih di antara tab dengan
:tabn
dan:tabp
, Dengan:tabe <filepath>
Anda dapat menambahkan tab baru; dan dengan biasa:q
atau:wq
Anda menutup tab. Jika Anda memetakan:tabn
dan:tabp
ke 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)sumber
ZZ
alih-alih:wq
(seperti yang biasanya disimpan dan ditutup)gt
pergi ke tab berikutnya, dangT
pergi ke tab sebelumnya.-p
flag untuk membuka banyak file di tab dari baris perintah. Misalnya,gvim -p main.pl maintenance.pl
akan membuka dua file ini di tab.Daftar
Untuk melihat daftar buffer saat ini, saya menggunakan:
Pembukaan
Untuk membuka file baru, saya menggunakan
dengan penambahan tab yang ditingkatkan (masukkan
set wildmenu
Anda.vimrc
).Catatan: Anda juga dapat menggunakan
:find
jalur 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
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 s
danCtrl-W v
untuk membagi jendela saat ini secara horizontal dan vertikal. Anda juga dapat menggunakan:split
dan:vertical split
(:sp
dan:vs
)Ctrl-W w
untuk beralih di antara jendela yang terbuka, danCtrl-W h
(j
atauk
ataul
) untuk menavigasi melalui jendela yang terbuka.Ctrl-W c
untuk menutup jendela saat ini, danCtrl-W o
untuk menutup semua jendela kecuali yang sekarang.Memulai vim dengan
-o
atau-O
flag 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-silent
opsi.sumber
:b
adalah 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.txt
atau:b oo<Tab><Enter>
mengedit file itu. Ya, yang terakhir akan menyelesaikan 'oo' menjadi 'foo.txt' saat Anda menekan <Tab>.nnoremap gb :ls<cr>:b<space>
. Ketika saya mengetikgb
dalam mode perintah, itu mencantumkan buffer dan tipe terbuka saya:b
, siap bagi saya untuk mulai mengetik nama / nomor buffer.:b
akan menerima pertandingan substring selama itu jelas. Jadi jika Anda memiliki file yang terbukafoo
,bar
danbaz
, hanya:b z
cukup untuk beralih Anda kebaz
buffer, dan:b oo
atau:b o
akan membawa Anda kefoo
penyangga.untuk daftar buffer terbuka
:bp
buffer sebelumnya:bn
buffer selanjutnya:bn
(n
angka) pindah ke buffer ke-n:b <filename-part>
dengan tab-key yang menyediakan pelengkapan otomatis (luar biasa !!)Dalam beberapa versi vim,
bn
danbp
sebenarnyabnext
danbprevious
masing - 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
Perintah di atas menyimpan buffer file terbuka dan pengaturan untuk
~/today.ses
. Anda dapat memuat sesi itu dengan menggunakanTidak ada kesulitan mengingat di mana Anda tinggalkan kemarin. ;)
sumber
"
tanda untuk melompat ke tempat Anda berada di file terakhir kali.Untuk menambah
args
daftar:Untuk menghapus dari
args
daftar:Dalam contoh Anda, Anda bisa menggunakan
:argedit
test.pl untuk menambahkan test.pl keargs
daftar dan mengedit file dalam satu langkah.:help args
memberikan lebih banyak detail dan penggunaan tingkat lanjutsumber
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.sumber
Saya pikir Anda mungkin menggunakan perintah yang salah untuk melihat daftar file yang telah Anda buka.
Coba lakukan a
:ls
untuk melihat daftar file yang telah Anda buka dan Anda akan melihat: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
:ls
yang dapat Anda gunakan:reg
untuk 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.sumber
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 ]gt
dangT
. Vim grafis bahkan memiliki tab grafis.sumber
vim -p dir/*
. Ukuran tab maksimum adalah 10, tetapi Anda dapat mengubahnya dalam~/.vimrc
pengaturantabpagemax
ke beberapa nilai lain.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.
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.
sumber
Hal-hal seperti
:e
dan:badd
hanya akan menerima SATU argumen, karena itu yang berikut akan gagalJika Anda ingin menambahkan beberapa file dari dalam vim, gunakan
arga[dd]
sumber
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:
sumber
:help window
VimSaat 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 / metodesumber
:b <partial filename><tab>
tambahset wildmenu
dalam.vimrc
karya 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.Menambahkan jawaban lain karena ini tidak tercakup oleh jawaban mana pun
Untuk mengubah semua buffer untuk
tab
dilihat.akan membuka semua buffer ke tampilan tab. Kemudian kita bisa menggunakan perintah tab terkait
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
Pokoknya untuk menjawab pertanyaan: Untuk menambah daftar arg:
arga file
,Untuk menghapus dari daftar arg:
argd pattern
Lebih lanjut di
:help arglist
sumber
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.sumber
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:
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.
sumber
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.
sumber
Jika hanya menggunakan perintah built-in vim , yang terbaik yang pernah saya lihat untuk beralih di antara beberapa buffer adalah ini:
Secara sempurna menggabungkan keduanya
:ls
dan:b
perintah - 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
,23
untuk menuju ke buffer 23,#
untuk menuju ke buffer alternatif / MRU,<Tab>
, atau<C-i>
untuk pelengkapan otomatis,<CR>
atau<Esc>
tetap pada buffer saat iniCuplikan dari output untuk pemetaan kunci di atas adalah:
Dalam cuplikan di atas:
%a
untuk saat ini,h
untuk disembunyikan,#
untuk sebelumnya, kosong untuk belum beralih ke.+
untuk dimodifikasi.Juga, saya sangat menyarankan
set hidden
. Lihat:help 'hidden'
.sumber
:b
dan:ls
banyak tetapi secara mandiri. Saya pikir ini menjadi kurang berguna ketika Anda memiliki lebih dari satu nilai buffer, tetapi Anda masih bisa kembali ke:b
nnoremap <leader>f :ls<cr>:b<space>
, yang mungkin mengenai masalah dengan perintah 'lebih'set more
hal-hal hanya membuat perbedaan ketika ada banyak file terbuka (lebih dari satu halaman), misalnyavim /usr/include/*
, meskipun kurang bermanfaat.Saya menggunakan berikut ini, ini memberi Anda banyak fitur yang Anda harapkan di editor lain seperti Sublime Text / Textmate
.vimrc
:let g:airline#extensions#tabline#enabled = 1
. Ini secara otomatis menampilkan semua buffer sebagai header tab ketika Anda tidak memiliki halaman tab dibukaset wildmenu
di.vimrc
kemudian ketika Anda mengetik:b <file part>
+ Tabuntuk buffer Anda akan mendapatkan daftar kemungkinan buffer yang dapat Anda gunakan panah kiri / kanan untuk menggulir:Explore
tetapi 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):cdo
pada hasil untuk melakukan pencarian dan penggantiansumber
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:
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, misalnya dan beberapa jendela baru, misalnyadan 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
screen
tidak (meskipun iterm2 mac tampaknya mendukungnya, tapi sekali lagi, pengaturan direktori saat ini tidak bekerja untuk saya). tmux 1.8sumber
Saya menggunakan baris perintah dan git banyak, jadi saya punya alias ini di bashrc saya:
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:
Untuk membuka banyak file sekaligus Anda harus menggabungkan ini dengan salah satu solusi lain.
sumber
Saya menggunakan beberapa buffer yang disembunyikan di
~/.vimrc
file saya .Script mini-buffer explorer juga bagus untuk mendapatkan daftar buffer yang bagus. Kemudian
:b1
atau:b2
... untuk pergi ke buffer yang sesuai atau menggunakan mini-buffer explorer dan tab melalui buffer.sumber
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
sumber
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:
Tentu saja Anda dapat memetakannya ke kunci yang berbeda, tetapi saya menemukan pemetaan untuk masuk sangat berguna.
sumber
Saya sarankan menggunakan plugin
Inilah tautan github dengan instruksi.
Nerdtree
Saya menggunakan vim-plug sebagai manajer plugin, tetapi Anda dapat menggunakan Vundle juga.
vim-plug
Vundle
sumber
Di banyak pengguna vim saya dan lainnya, opsi terbaik adalah,
Dan kemudian cukup Ctrl + 6 untuk mengubah ke buffer terakhir. Atau, Anda selalu dapat menekan
Dan kemudian
<C-W><C-H/K/L/j>
untuk mengubah pembagian kerja.Anda dapat mengedit file dalam jumlah berapa pun.
sumber
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.
sumber
jika Anda menggunakan osx dan ingin dapat mengklik tab Anda, gunakan MouseTerm dan SIMBL (diambil dari sini ). Juga, lihat diskusi terkait ini .
sumber
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 ):
Untuk beralih di antara dua file terakhir cukup tekan
<leader>
dua kali. Saya sarankan menetapkan<leader>
untuk bilah spasi:Untuk bergerak cepat di sekitar proyek, jawabannya adalah solusi pencocokan kabur seperti CtrlP . Saya mengikatnya
<leader>a
untuk akses cepat.Dalam hal ini saya ingin melihat representasi visual dari buffer yang saat ini terbuka, saya menggunakan plugin BufExplorer . Sederhana tetapi efektif.
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
2
metode 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:
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:
Pindah dari split ke split dengan mudah:
sumber
Anda dapat menjadi gila mutlak dan alias
vim
untukvim -p
dengan menambahkan di Anda.bashrc
:alias vim="vim -p"
Ini akan menghasilkan membuka banyak file dari shell di tab, tanpa harus memohon
:tab ball
dari dalam vim sesudahnya.sumber