2017-02-20 5 views
0

Я хочу установить переменные тегов в набор из всех gotags файлов, сгенерированных в определенных папках с помощью exuberant Ctags. (gotags - это не что иное, как файл tags).vimrc как вызвать unix find?

Я поставил следующие строки в файле .vimrc.

set tags+=/usr/local/go/src/gotags 
set tags+=`find /home/vimal/gowork/src -name gotags` 

, но он не работает, и я получаю следующую ошибку

$ vi ~/.vimrc 
Error detected while processing /home/vimal/.vimrc: 
line 157: 
E518: Unknown option: /home/vimal/gowork/src 
Press ENTER or type command to continue 

как я могу исправить ошибку и установить tags переменную со значением: список всех gotags файлов в одном дереве каталогов.

ответ

2

Изобретение нового синтаксиса не так хорошо работает на практике. Используйте system() для запуска внешних команд от Vim, а не обратных ссылок. Также set в Vim странно, он не оценивает RHS так, как вы ожидаете. В большинстве случаев гораздо проще использовать let &option = ... вместо set option=....

Во всяком случае, чтобы ответить на ваш вопрос, вам не нужно запускать find(1) для этого, простые функции Vim достаточно для того, что вы хотите:

let &tags = join(extend([&tags, '/usr/local/go/src/gotags'], 
    \ findfile('gotags', '/home/vimal/gowork/src', -1)), ',') 
+0

спасибо большое за ваш ответ, но как только теги из '/ usr/local/go/src/gotags' только проверяются, другие файлы тегов, перечисленные в результате' findfiles', не выполняются. – weima

+0

Я проверил help для ': findfile()' и обнаружил, что нам нужно использовать подстановочный знак '*' для поиска вниз. поэтому следует использовать 'findfile ('gotags', '/ home/vimal/gowork/src/*', -1)' – weima

+0

спасибо @Sato :) – weima

Смежные вопросы