2011-01-04 3 views
9

Inn ~/script.vim, у меня есть:Установить runtimepath, добавив каталог из выражения в vim?

set runtimepath+=string(substitute(expand("%:p"), 'script\.vim', '', 'g')) 

У меня есть псевдоним в .bashrc:

alias vimscript="vim -S ~/script.vim" 

Запуск string(substitute(expand("%:p"), 'script\.vim', '', 'g')) работает как задумано.

Проблема заключается в том, что при использовании в установленном выражении runtimepath это не работает, когда я вызываю vimscript в терминал, который вызывает script.vim. Когда я запускаю set rtp в vim после вызова vimscript для проверки пути выполнения, нужная добавленная строка не отображается (но есть другие).

ответ

16

У меня есть некоторые дополнения к @Laurence Gonsalves ответить:

  1. Существует также «CONCAT и назначения» оператора: .=, так

    let foo=foo.bar 
    

    можно переписать в виде

    let foo.=bar 
    
  2. Код

    let &runtimepath.=','.string(path) 
    

    добавит ,'/some/path' к & runtimepath, в то время как вы, вероятно, нужно ,/some/path ,

  3. Я предполагаю, что вы хотите добавить путь к своему скрипту в runtimepath. Если это правда, то ваш код должен быть записан в виде

    let &runtimepath.=','.escape(expand('<sfile>:p:h'), '\,') 
    

    внутри сценария или

    let &runtimepath.=','.escape(expand('%:p:h'), '\,') 
    

    из текущего сеанса редактирования (при условии, что вы редактируете ваш скрипт в текущем буфере).

+0

ваш подход лучше ИМО, использование заменителя было действительно уродливым, когда можно использовать параметры расширения. Благодарю. –

2

Правый сайт команды set не является выражением, это буквальная строка.

Вы можете манипулировать опциями (вещи set комплектов), используя let и префикс имени опции &. например:

let &runtimepath=substitute(expand("%:p"), 'script\.vim', '', 'g') 

Для добавления к runtimepath с let вы можете сделать что-то вроде: (. . является оператором конкатенации)

let &runtimepath=&runtimepath . ',' . substitute(expand("%:p"), 'script\.vim', '', 'g') 

+0

Я думаю, мне нужно прочитать всю документацию по vim и некоторые книги, чтобы понять все эти понятия. Я попробовал второй вариант, но все еще не работает: теперь вместо строки (substitute (expand (у меня есть «при запуске set rtp». Что мне не хватает? –

+0

@Somebody Выражение, в которое вы включили 'string() ', которого у него не должно быть.(Я просто скопировал ваше выражение дословно в правильный шаблон.) Я обновил ответ, чтобы использовать исправленную форму вашего выражения. Вероятно, это может быть упрощено, как это сделал ZyX, но это должно по крайней мере дать вам правильный путь. –

+0

@Somebody BTW, я никогда не читал книгу vim. ': help' в vim на самом деле неплохо, но есть * много * укромных уголков и трещин. Я использую Vim уже более десяти лет, и я все еще регулярно изучаю новые вещи. –

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

  • Нет связанных вопросов^_^