Dalam vim, bagaimana saya bisa beralih antar tab dengan cepat?

126

Dalam gnome-terminal, aku hanya dapat menekan Alt+ ( 1, 2, 3, dll) untuk beralih ke tab tertentu. Saya juga dapat menggunakan Ctrl+ ( PgUp/ PgDn) untuk menggilir tab (diakui kurang nyaman, tetapi dapat dipetakan kembali).

Jika saya ingin menggunakan tab vim alih-alih tab gnome-terminal, mengetik :tabndan :tabpcukup rumit. Saya bisa memetakannya ke pintasan keyboard, tapi itu masih jauh lebih nyaman daripada melompat langsung ke tab 4 dengan Alt+ 4.

Apakah ada cara yang lebih cepat untuk beralih antar tab di vim?

Matius
sumber

Jawaban:

209

Tab selanjutnya: gt

Tab sebelumnya: gT

Tab bernomor: nnngt

singkat
sumber
1
Saya tahu bahwa saya bisa mengetik nnn g t, tetapi saya ingin melakukannya dengan cepat , yaitu Alt + nnnatau Ctrl + nnn. Tetapi Alt + nsudah diambil oleh terminal gnome, dan mengikat untuk Ctrl + ntampaknya tidak berpengaruh.
Matius
6
Bagaimana dengan memetakan kunci fungsi nnn g t? Misalnya :map <F2> 2gt,. Ada masalah yang <F1>sering dipetakan oleh GNOME ke fasilitas bantuannya. Atau Anda bisa memilih beberapa kunci Anda tidak sering digunakan dalam mode normal, mengatakan koma, dan peta seperti ini: :map , gt. Kemudian 1,akan membawa Anda ke tab 1, 2,ke tab 2, dan seterusnya.
garyjohn
2
Saya merasa sangat nyaman untuk menggunakan '<' dan '>'
Igor Stoppa
Gulir ke bawah untuk jawaban yang lebih baik ..
The Vivandiere
41

Mengapa tidak memanfaatkan pemimpin Anda (pemimpin saya dipetakan ke Space):

" Go to tab by number
noremap <leader>1 1gt
noremap <leader>2 2gt
noremap <leader>3 3gt
noremap <leader>4 4gt
noremap <leader>5 5gt
noremap <leader>6 6gt
noremap <leader>7 7gt
noremap <leader>8 8gt
noremap <leader>9 9gt
noremap <leader>0 :tablast<cr>

Anda dapat menggunakan pengaturan di bawah ini untuk beralih di antara tab aktif saat ini dan yang terakhir (ini dipetakan ke Ctrl+ L, yaitu, <c-l>):

" Go to last active tab

au TabLeave * let g:lasttab = tabpagenr()
nnoremap <silent> <c-l> :exe "tabn ".g:lasttab<cr>
vnoremap <silent> <c-l> :exe "tabn ".g:lasttab<cr>
tidak bisa diperbaiki
sumber
2
Anda perlu au TabLeave * let g:lasttab = tabpagenr()untuk c-lbekerja: stackoverflow.com/questions/2119754/...
Ciro Santilli新疆改造中心法轮功六四事件
1
Saya akan menambahkan <leader>h/luntuk gTdangt
Brenden
25

Ini adalah cara termudah yang saya temukan, untuk beralih di antara tab dengan lebih cepat dan sederhana.
Tambahkan baris berikutnya ke .vimrc Anda dan nikmatilah, lebih banyak trik tentang tab vim di sini .

nnoremap <C-Left> :tabprevious<CR>
nnoremap <C-Right> :tabnext<CR>

Sekarang Anda dapat menggunakan Ctrl untuk ke kiri dan Ctrl ke kanan.

Atau cukup gunakan:
1gtuntuk menuju ke tab satu,
2gtke tab dua,
3gtke tab tiga, dll ... sekarang Anda punya ide.

Arnold Gandarillas
sumber
Saya pikir ini adalah jawaban terbaik di sini. Sangat nyaman untuk dimiliki. Saya baru saja menonaktifkan keybindings sistem di OS X untuk membuat mereka sistem independen.
Léo Léopold Hertz 준영
1
Gunakan tombol panah akan memperlambat Anda. Saya telah menonaktifkannya
Tanya dan Pelajari
Yup ... Jawaban terbaik!
The Vivandiere
Sayangnya "Ctrl" memberi saya masalah di vmplayer, jadi saya mengubah ke tombol "Backspace" dan "Enter".
Boris Däppen
Pengguna Mac: Anda mungkin perlu menonaktifkan pintasan keyboard spasi Kontrol Misi standar: stackoverflow.com/questions/15719135/…
azatar
15

Karena saya menggunakan Mac dan tidak menggunakan MacVim (tetapi vim dalam terminal), saya mengalami beberapa kesulitan dengan kombinasi tombol yang tidak dikirim melalui terminal.

Cara yang paling kompatibel (dan bagi saya yang paling nyaman) untuk beralih tab dengan cepat berasal dari situs Vim Wikia .

Tempatkan di .vimrcfile Anda :

nnoremap H gT
nnoremap L gt

Sekarang Shift-h(capital H) dan Shift-l(modal L) akan beralih Anda dengan cepat di antara tab, dan mengikuti konvensi yang hdan lsesuai dengan kiri dan kanan di vim pada keyboard qwerty biasa.

Stefan Magnuson
sumber
Saya suka solusi ini, intuitif dan seperti vim. Tidak perlu tombol panah.
Ivan Ivković
Saya setuju. Solusi yang sangat bagus
j sedih
ini benar-benar solusi intuitif. Terima kasih!
LeOn - Han Li
2

(Sayangnya) vim juga menggunakan CtrlPgDn/ PgUpuntuk menggilir tab. Anda harus menggunakan mapuntuk memetakan tabn/ tabpke sesuatu yang dapat digunakan.

Ignacio Vazquez-Abrams
sumber
2

Jika Anda menggunakan gvim atau yang serupa (yaitu, sesuatu di luar terminal), Anda dapat meniru gnome-terminalperilaku yang Anda uraikan dengan:

" Map alt-x keys to jump to a tab
for i in range(1, 8)
  execute "nmap \<M-" . i . "> " . i . "gt"
endfor
nmap <M-9> :tablast<CR>

Jadi alt-1lompat ke tab pertama, dll. Tapi alt-9lompat ke tab terakhir (seperti di Chrome).

Anda mungkin ingin membungkus ini if has("gui_running")(meskipun ini sepertinya tidak bekerja dengan Neovim), atau memasukkan ini ke dalam .gvimrc.

Joe Freeman
sumber
2

Tambahkan ini ke .vimrc untuk mengaktifkan tombol pintas navigasi tab:

<ctrl-l> beralih di antara 2 tab terbaru;

<ctrl-j/k> kebagian tab terakhir / berikutnya;

<ctrl-t> buka tab baru.

" tab navigation: Alt or Ctrl+Shift may not work in terminal: " http://vim.wikia.com/wiki/Alternative_tab_navigation " Tab navigation like Firefox: only 'open new tab' works in terminal nnoremap <C-t> :tabnew<CR> inoremap <C-t> <Esc>:tabnew<CR> " move to the previous/next tabpage. nnoremap <C-j> gT nnoremap <C-k> gt " Go to last active tab au TabLeave * let g:lasttab = tabpagenr() nnoremap <silent> <c-l> :exe "tabn ".g:lasttab<cr> vnoremap <silent> <c-l> :exe "tabn ".g:lasttab<cr>

Mengqi Ji
sumber
Apakah mungkin untuk memetakan <Ctrl> - <Tab> ke fungsi tab toggle terakhir. Saya sudah mencoba nnoremap <silent> <C-Tab> :exe "tabn ".g:lasttab<cr>dan vnoremap <silent> <C-Tab> :exe "tabn ".g:lasttab<cr>tidak berhasil.
zzeroo