2011-01-04 11 views
9

Inn ~/script.vim, tengo:Establecer runtimepath, agregar un directorio de una expresión en vim?

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

tengo un alias en .bashrc:

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

Correr string(substitute(expand("%:p"), 'script\.vim', '', 'g')) funciona como está previsto.

El problema es que al usarlo en la expresión set runtimepath, no funciona cuando llamo al vimscript en el terminal que llama al script.vim. Cuando ejecuto set rtp en vim después de haber sido llamado por vimscript para verificar el runtimepath, la cadena adjunta no se muestra (pero las otras están allí).

Respuesta

16

Tengo algunas adiciones a @Laurence Gonsalves respuesta:

  1. Hay También «concat y asignar» operador: .=, por lo

    let foo=foo.bar 
    

    puede reescribirse como

    let foo.=bar 
    
  2. Código

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

    añadirá ,'/some/path' a & runtimepath, mientras que es probable que tenga ,/some/path .

  3. Supongo que desea agregar la ruta a su script a runtimepath. Si bien es cierto, entonces el código debe ser escrito como

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

    dentro de un script, o

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

    de la sesión de edición actual (suponiendo que está modificando la secuencia de comandos en el búfer).

+0

su enfoque es mejor IMO, el uso de sustituto fue realmente feo cuando es posible usar parámetros expandir. Gracias. –

2

El sitio de la derecha de un comando set no es una expresión, es una cadena literal.

Puede manipular las opciones (las cosas set conjuntos) usando let y anteponiendo el nombre de la opción con un &. por ejemplo:

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

para anexar a runtimepath con un let se puede hacer algo como: (. El . es el operador de concatenación de cadenas)

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

+0

Creo que necesito leer toda la documentación de vim, y algunos libros para comprender todos estos conceptos. Probé la segunda opción, pero todavía no funciona: ahora, en lugar de cadena (sustituto (expandir (tengo '' cuando ejecuto establecer rtp. ¿Qué me estoy perdiendo? –

+0

@Somebody La expresión que incluiste 'cadena() ', que no debería tener.(Acabo de copiar tu expresión textualmente en el patrón correcto.) He actualizado la respuesta para usar la forma corregida de tu expresión. Probablemente aún podría simplificarse, como lo hizo ZyX, pero al menos esto debería llevarlo por el buen camino. –

+0

@Somebody BTW, nunca he leído un libro de vim. ': help' in vim es realmente bastante bueno, pero hay un * lot * de rincones y grietas. He estado usando Vim durante más de una década y todavía aprendo cosas nuevas sobre eso regularmente. –

Cuestiones relacionadas