Есть ли способ заставить gf
команду vim (или что-то подобное) распознать +{cmd}
аргумент для пути к файлу?
Можно запустить vim и перейти непосредственно к поисковому запросу, выполнив:
$ vim +/coding_effort ~/project/file
Аналогично, в командном режиме вы можете сделать:
:e +/coding_effort ~/project/file
Я часто делаю заметки и ссылаюсь на другие файлы, например:
For more info see +/coding_effort ~/project/file where there's a detailed discussion.
Я хотел бы иметь возможность выбрать +/coding_effort ~/project/file
, напечатать что-то вроде gf
, и Vim сделать правильные вещи.
key-bindings
command-line
search
Оливер Тейлор
источник
источник
Ответы:
Нет, первая проблема заключается в том, что необходимый пробел между командой и именем файла не является частью
isfname'
опции ' , и добавление его будет означать, что границы файла вообще не могут быть распознаны. Вам либо нужно всегда использовать визуальный выбор (как команды, так и имени файла), либо реализовать пользовательский анализ вgf
перегрузке команды.Во-вторых, встроенный
gf
не распознает+{cmd}
синтаксис, поэтому на самом деле нет способа реализовать собственное отображение. Это, безусловно, возможно (с использованием таких функций, какexpand('<cfile>')
,getline()
и т. Д.), Но, вероятно, занимает несколько строк функции Vimscript.Если вы выберете другой синтаксис (
filename:+command
), вы можете оставить исходныеgf
команды и реализовать разбиение в:autocmd
, аналогично тому, для чего предназначен очень связанный файл: плагин linefilespec:linenumber
).источник
Вот функция, которая должна воспроизводить встроенное
gf
поведение, а также сканирует работы, начиная с+
которых затем передается:edit
Комментарии должны объяснить, что функция делает более подробно ... Я написал это в поезде утром, и (очевидно) не проверял это подробно ;-)
источник
Одним из вариантов будет (при условии, что
+cmd file/path
выбран), чтобы восстановить выборку в регистр, а затем вставить этот регистр в командной строке. Я сделал это с помощью следующего сопоставления:vnoremap gsf "0y:e <c-r>0<cr>
источник
Эта запись работает (
file name
+trailing :
+/ pat /
)с функцией и отображением ниже.
источник