Установить runtimepath, добавить каталог из выражения в vim? - PullRequest
14 голосов
/ 04 января 2011

Inn ~/script.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 для проверки пути выполнения, нужная добавленная строка не отображается (но есть и другие).

Ответы [ 2 ]

21 голосов
/ 04 января 2011

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

  1. Также есть оператор «concat and assign»: .=, поэтому

    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'), '\,')
    

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

3 голосов
/ 04 января 2011

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

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

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

Чтобы добавить к runtimepath с помощью let, вы можете сделать что-то вроде:

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

(. - оператор объединения строк.)

...