Открыть имя файла под курсором, как gf, но в новой вкладке (или разделить)?

43

Команда нормального режима - gfперейти к файлу с путем, на котором находится курсор в данный момент.

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

Я уверен, что это возможно, открыв файл под курсором в новой вкладке?

Volker Siegel
источник
3
Включение 'hidden'опции ( set hidden) позволяет вам перемещаться от несохраненных буферов. Для меня это стало огромным стимулом для повышения производительности, и было жизненно важно перестать так сильно полагаться на разбиения и вкладки.
Tommcdo

Ответы:

56

РЕДАКТИРОВАТЬ: Предложить красиво симметричные отображения для случая разделения по вертикали, поскольку Vim по умолчанию имеет два отображения для случая разделения по горизонтали.

Существует несколько способов отредактировать «файл под курсором», и хотя вы, безусловно, можете переназначить его gfдля редактирования на новой вкладке, как упоминает @ alexander-myshov, это означает, что у вас есть два способа отредактировать его на новой вкладке, но нет способа отредактируйте его в текущем окне, что вы можете иногда захотеть сделать. Нетрудно использовать стандартные сопоставления, но если вы хотите переназначить одно из них gf, я бы рекомендовал переключить сопоставления, чтобы вы не потеряли одно из них.

Некоторые из способов отредактировать имя файла под курсором:

  • gf - Изменить существующий файл под курсором в том же окне
  • C-Wf - Редактировать существующий файл под курсором в разделенном окне
  • C-WC-F - Редактировать существующий файл под курсором в разделенном окне
  • C-Wgf - Изменить существующий файл под курсором на новой вкладке

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

  • C-Wv+ gf- Редактировать существующий файл под курсором в вертикально разделенном окне

Как вы можете видеть выше, есть два отображения по умолчанию для редактирования файла под курсором в горизонтальном разделении. Поэтому вы можете переназначить один из них на цепочку ключей выше, расширяя группу карт, чтобы охватить также вертикальный разделенный регистр. Вы можете связать что - нибудь, конечно, но это , кажется , чтобы закончить симметрию красиво: nnoremap <C-W><C-F> <C-W>vgf. Теперь у вас есть

  • gf - Изменить существующий файл под курсором в том же окне
  • C-Wf - Редактировать существующий файл под курсором в разделенном окне
  • C-WC-F - Редактировать существующий файл под курсором в вертикально разделенном окне
  • C-Wgf - Изменить существующий файл под курсором на новой вкладке

Вы также можете перейти к определенной строке в файле, если после имени файла под курсором следует номер строки. Если у вас есть

filename:10

Вы можете отредактировать файл и переместить курсор на строку 10 с помощью gF. Эквивалент верен для C-WFразделения и C-WgFдля вкладки. Завершение симметрии для вертикального разделения здесь не так просто, но я хотел бы предложить, чтобы C-WC-S-Fкарта получалась с nnoremap <C-W><C-S-F> <C-W>vgFимитацией Fили Shift+ fиз карт по умолчанию в качестве кандидата.

Это :пример, вы можете использовать любой символ, который не является символом имени файла (см. :h 'isfname').


Все эти команды идут с яблочным соусом, таким как

  • расширить wildchars
  • искать в большем количестве мест, чем текущий каталог, в зависимости от вашего 'path'варианта
  • добавив расширение файла к имени файла, согласно вашему 'suffixesadd'выбору
  • в противном случае измените указанное имя файла, чтобы найти соответствие, в соответствии с вашим 'includeexpr'вариантом

Читайте больше на :help gfи разделах справки для этих различных вариантов.


Если имя файла под курсором называет файл, который не существует, вам может быть лучше использовать стандартные команды редактирования с <cfile>, например,

:edit <cfile> // edit non-existent file under cursor in current window
:split <cfile> // edit non-existent file under cursor in split window
:vsplit <cfile> // edit non-existent file under cursor in vertical split window
:tabe <cfile> // edit non-existent file under cursor in new tabpage

и с ними, конечно, вы можете использовать такие вещи, как :spl+10 filenameперемещение курсора на определенную строку или :tabe+/cologne filenameперемещение курсора к первому вхождению шаблона.

jjaderberg
источник
+1 Лучший комментарий с четким объяснением, намного лучше, чем документация, разделенная на несколько тем.
Любит Вероятность
8

Просто используйте привязки для этого:

открытие в новом окне (сплит):

nnoremap gf <C-W>f
vnoremap gf <C-W>f

Открытие в новой вкладке:

nnoremap gf <C-W>gf
vnoremap gf <C-W>gf

также проверьте это: :help CTRL-W_gf

Александр Мышов
источник
Это определенно работает для вас? Кажется, Вим не хочет, чтобы я переназначил gfчто-то еще. Даже nnoremap gf :echo "hello"<CR> все еще открывает файл под курсором в новом буфере (и да, я выбрал vimrc).
tandrewnichols
Ах, неважно - у меня плагин мешает.
tandrewnichols