В vim как быстро переключаться между вкладками?


126

В гнома-терминале, я могу просто нажать Alt+ ( 1, 2, 3и т.д.) , чтобы перейти к определенным вкладкам. Я также могу использовать Ctrl+ ( PgUp/ PgDn) для переключения между вкладками (правда, менее удобно, но его можно переназначить).

Если я хочу использовать вкладки vim вместо вкладок gnome-терминал, печатать :tabnи :tabpдовольно громоздко. Я мог бы сопоставить их с сочетаниями клавиш, но это все же намного менее удобно, чем переход непосредственно к вкладке 4 с помощью Alt+ 4.

Есть ли более быстрый способ переключения между вкладками в vim?

Ответы:


210

Следующая вкладка: gt

Предыдущая вкладка: gT

Нумерованная вкладка: nnngt


1
Я знаю, что я мог печатать nnn g t, но я хочу сделать это быстро , т . Е. Alt + nnnИли Ctrl + nnn. Но Alt + nуже занято gnome-терминал, и привязка к Ctrl + n, кажется, не имеет никакого эффекта.
Матфея

6
Как насчет отображения функциональных клавиш на nnn g t? Например, :map <F2> 2gt. Существует проблема, которая <F1>часто отображается в GNOME в ее справочную систему. Или вы могли бы выбрать какой - ключ вы не часто пользуетесь в обычном режиме, скажем , запятая, и отобразить его следующим образом: :map , gt. Затем 1,вы перейдете к вкладке 1, 2,вкладке 2 и т. Д.
garyjohn

2
Мне было очень удобно использовать «<» и «>»
Игорь Стоппа

Прокрутите вниз, чтобы получить лучший ответ ..
The Vivandiere

41

Почему бы не использовать своего лидера (мой лидер сопоставлен с 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>

Вы можете использовать настройки ниже для переключения между текущей и последней активной вкладкой (здесь она отображается на Ctrl+ L, т.е. <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>

2
Вам нужно au TabLeave * let g:lasttab = tabpagenr()для c-lработы: stackoverflow.com/questions/2119754/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

1
Я бы добавил <leader>h/lдля gTиgt
Бренден

25

Это самый простой способ, который я нашел, чтобы переключаться между вкладками быстрее и проще.
Добавьте следующие строки в ваш .vimrc и наслаждайтесь им, больше трюков о вкладках vim здесь .

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

Теперь вы можете использовать, Ctrl чтобы пойти налево и Ctrl идти направо.

Или просто используйте:
1gtчтобы перейти к первой вкладке,
2gtперейти к второй вкладке,
3gtперейти к третьей вкладке и т. Д. ... теперь у вас есть идея.


Я думаю, что это лучший ответ здесь. Очень удобно иметь. Я просто отключил эти системные сочетания клавиш в OS X, чтобы сделать их независимыми от системы.
Лео Леопольд Герц

1
Используйте клавиши со стрелками, чтобы замедлить вас. Я отключил их
спрашивай и учись

Да ... Лучший ответ!
Вивандьер

К сожалению, «Ctrl» доставил мне проблемы в vmplayer, поэтому я переключился на клавиши «Backspace» и «Enter».
Борис Деппен

Пользователям Mac: вам может потребоваться отключить сочетания клавиш по умолчанию для пространств управления полетом: stackoverflow.com/questions/15719135/…
azatar

15

Поскольку я работаю на Mac и не использую MacVim (но обычный vim в терминале), у меня возникли трудности с передачей комбинаций клавиш в терминал.

Самый совместимый (и для меня самый удобный) способ быстро переключаться между вкладками - это сайт Vim Wikia .

Поместите в свой .vimrcфайл:

nnoremap H gT
nnoremap L gt

Теперь Shift-h(заглавная H) и Shift-l(заглавная L) быстро переключат вас между вкладками и будут следовать соглашению, которое hи lсоответствует слева и справа в vim на обычной qwerty-клавиатуре.


Мне нравится это решение, интуитивно понятное и похожее на vim. Клавиши со стрелками не нужны.
Иван Ивкович

Я согласен. Очень хорошее решение
грустно

это действительно интуитивное решение. Спасибо!
Леон - Хан Ли

2

(К сожалению) vim также использует CtrlPgDn/ PgUpдля переключения между вкладками. Вы должны будете использовать, mapчтобы сопоставить tabn/ tabpс чем-то пригодным для использования.


2

Если вы используете gvim или аналогичный (то есть что-то вне терминала), вы можете имитировать gnome-terminalповедение, которое вы описываете:

" 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>

Так что alt-1переходит на первую вкладку и т. Д. Но alt-9переходит на последнюю вкладку (как в Chrome).

Возможно, вы захотите обернуть это if has("gui_running")(хотя это, похоже, не работает с Neovim) или вставить это .gvimrc.


2

Добавьте их в .vimrc для включения горячих клавиш навигации по вкладкам:

<ctrl-l> переключаться между двумя последними вкладками;

<ctrl-j/k> перейти на последнюю / следующую вкладку;

<ctrl-t> откройте новую вкладку.

" 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>


Можно ли сопоставить <Ctrl> - <Tab> с последней функцией переключения вкладок. Я пытался nnoremap <silent> <C-Tab> :exe "tabn ".g:lasttab<cr>и vnoremap <silent> <C-Tab> :exe "tabn ".g:lasttab<cr>без удачи.
zzeroo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.