передать имя файла и текущую строку в скрипт

5

Я хотел бы передать имя файла и номер текущей строки, где находится мой курсор, через двоеточие, внешнему сценарию оболочки. Например, если я редактирую файл "foo.c", и в настоящее время я нахожусь на строке 77, я бы хотел вызвать свой скрипт из vim с аргументом "foo.c: 77".

jpmuc
источник

Ответы:

6

Альтернатива ответу Каралоса:

:call system('echo ' . expand('%') . ':' . line('.'))

Конечно, вы заменяете «echo» на имя вашего сценария оболочки.

Преимущество system () состоит в том, что он возвращает вывод команды run, поэтому вы можете записать его для дальнейшего использования в скрипте Vim, если вам это нужно.

Возможно, вам придется взглянуть на модификаторы, :help expand()если вам нужно каким-либо образом уточнять / изменять имя файла.

Heptite
источник
1
Также: рассмотрите возможность использования shellescape()для защиты любых специальных символов.
Крис Джонсен
2

Хотя это довольно громоздко, вы можете попробовать следующее

:!echo %:<Ctrl+R>=line(".")<CR><CR>

или вы могли бы использовать промежуточную переменную

:let l=line(".")

и позвонить

:!echo %:<Ctrl+R>=l<CR><CR>
Karolos
источник