Заставить vim понимать переменные окружения сценария tcl (команда 'gf') - PullRequest
1 голос
/ 20 марта 2019

Я часто использую gf в vim, чтобы открывать файлы под курсором. Часто эти пути к файлам используют переменные среды, но когда в файлах сценариев .tcl vim не может использовать переменную среды.

Это работает для gf:

$tcl_lib/myfile.tcl

Это не работает для gf:

$env(tcl_lib)/myfile.tcl
$::env(tcl_lib)/myfile.tcl

Вот некоторые из вещей, которые я пробовал:

:set isfname=@,48-57,/,.,-,_,+,,,#,$,%,~,=,{,},(,)
:set isfname=@,48-57,/,.,-,_,+,,,#,$,%,~,=,{,},40-41

:set includeexpr=substitute(v:fname,'\$env(\([^)]\+\))','\$\1','')

Есть ли способ заставить vim понимать синтаксис переменных среды в сценариях tcl (особенно для команды 'gf')?

1 Ответ

2 голосов
/ 20 марта 2019

Есть несколько техник:

Набор 'path' & 'includeexpr'

Теоретически вы можете просто добавить $tcl_lib к пути. например set path=.,$tcl_lib,,. Однако любое имя файла, начинающееся с /, не будет выполнено. Это можно исправить, удалив начальный /.

Добавить к ~/.vim/after/ftplugin/tcl.vim:

set path=.,$tcl_lib,,
let &l:includeexpr="substitute(v:fname, '^/', '', 'g')"

Чтение переменных среды через 'includeexpr'

Может использовать подстановку для расширения переменных среды

let l:includeexpr = "substitute(v:fname, '$\\%(::\\)\\=env(\\([^)]*\\))', '\\=expand(\"$\".submatch(1))', 'g')"

При этом используется выражение подстановки (см. :h sub-replace-expression) для использования expand() для получения переменной среды.

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

Просто карта gf и друзья

Создайте локально-буферные сопоставления для gf, <c-w>f и т. Д., Которые относятся к вашему языку, и проверьте определенные пути. Это полностью игнорирует многие встроенные методы Vim, поэтому его следует использовать как последнее средство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...