Как вы вернетесь из «GF» в Vim

187

Я использую Vim для Windows, установленной в режиме Unix. Благодаря этому сайту я теперь использую gfкоманду для перехода в файл под курсором.

Я ищу команду либо:

  1. вернуться к предыдущему файлу (аналогично Ctrl+ Tдля ctags) или
  2. переназначить gf для автоматического запуска нового файла в новом окне.
JayG
источник

Ответы:

294

Я использую Ctrl-O

Джоп
источник
43
CTRL-O - перейти на более раннюю позицию в списке переходов, <Tab> или CTRL-I - перейти на более новую позицию.
Себастьян РоккаСерра
4
@ g33kz0r мнемоника будет O = OUT, I = IN => Ctrl - O выводит вас, Ctrl вводит вас. Если каждый прыжок подобен проходу через дверь, то есть.
крон
CTRL-O будет переходить на последнюю посещенную позицию, это раздражает, когда новый файл был найден. Я предпочитаю Shift-Ctrl-6 (в моем случае Ctrl-6 не работает)
Adriano
71

Я часто использую Ctrl- 6для этого.

Это удобно, потому что позволяет быстро переключаться между двумя файлами.

Доминик Дос Сантос
источник
47

Вы можете использовать CTRL-W gfдля открытия файла в новой вкладке.

Вы можете закрыть вновь открытый файл, как всегда :bd, или использовать CTRL-6и другие обычные способы изменения буферов.

Роман Одайский
источник
7
вкладка для меня более удобна, чем буфер, и использование nnoremap gf <C-W>gfоткрытия новой вкладки может быть лучше.
Searene
14

Используйте gf, чтобы спуститься в файл и используйте: bf, чтобы вернуться

ОЗУ
источник
1
У меня было открыто два окна на вкладке, и это просто открыло второе окно в первом вместо того, чтобы вернуться к предыдущему буферу.
Кенни Эвитт,
12

Просто используйте с :e#последующим Enter- это в основном говорит, чтобы отредактировать последний (самый последний) файл.

paxdiablo
источник
9

Ctrl-Shift-6 один.

:e#↲ Другой.

tzot
источник
8
Сдвиг не нужен. Хватит ругать пальцы.
Затрус
6
Um. Я вроде старого таймера. Ctrl-6 не будет работать с vi на терминале Wyse, который я имел на работе много лет назад. Видите, некоторые вещи остаются запечатленными. И если не использовать Shift в этой комбо, то вряд ли что-то изменит мое общее злоупотребление пальцами. Эй, по крайней мере, ты старался изо всех сил. НТН. РУКА.
tzot
Это переключается на то, что называется альтернативным файлом .
jpaugh
5

Я получил CTRL-W f на работу.
Очень печально, что я так долго совершенствовал карты для этих команд, чтобы обнаружить, что есть встроенные версии.


источник
5

Я не знаю ответа на часть 2 вашего вопроса, но могу помочь с частью 1. Использование

:e#

Vim поддерживает список файлов (буферов), которые он редактирует. Если вы печатаете

:buffers

в нем будут перечислены все файлы, которые вы в настоящее время редактируете. Файл в этом списке с% рядом с ним является текущим файлом. Один с # рядом с ним - альтернативный файл. : e # будет переключаться между текущим и альтернативным файлом. Вместо того, чтобы печатать так много, я сопоставляю F2 с: e #, чтобы я мог легко переключаться между текущим и альтернативным файлами. Я сопоставляю команду с F2, добавляя это к .vimrc

nmap `<F2> :e#<CR>`
codebunny
источник
2
Я не думаю, что вы хотите использовать: e #, потому что это может потенциально перезагрузить файл. : b # делает эквивалент без этой проблемы.
lambacck
Хорошая точка зрения. Это переключается на другой буфер без перезагрузки.
codebunny
2

Когда вы открываете новый файл (с помощью gf или : n или другой команды), старый файл остается в списке буферов. Вы можете просмотреть список открытых файлов с помощью : ls

Если вы хотите легко перемещаться между буферами в vim, вы можете создать отображение следующим образом:

nmap <M-LEFT> :bN<cr>
nmap <M-RIGHT> :bn<cr>

Теперь вы можете переключаться между буферами с помощью Alt + стрелка влево или Alt + стрелка вправо.

Полная документация по сопоставлениям находится здесь:

:help map.txt
Oli
источник
0

Я не смотрел на вашу команду gf, но думаю, что она использует команду : e или : find .
Предполагая, что это правильно, просто замените : e или : find на : new (или : vnew для вертикального разделения), и файл откроется в новом окне вместо того же.

например

"Переключение между заголовком и cpp
nmap, s: find%: t: ​​r.cpp <CR>
Nmap, S: новый%: t: ​​r.cpp <CR>
nmap, h: find%: t: ​​rh <CR>
Nmap, H: новый%: t: ​​rh <CR>
nmap, F: new = expand ("<cfile>: t") <CR> <CR>
nmap, d: new = expand ("<cfile>") <CR> <CR> 


источник
2
gfвстроен Это принадлежит всем нам. :-)
jpaugh