2011-01-04 10 views
9

Inn ~/script.vim, ho:Imposta runtimepath, aggiungendo una directory da un'espressione in vim?

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

Ho un alias in .bashrc:

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

Esecuzione string(substitute(expand("%:p"), 'script\.vim', '', 'g')) funziona come previsto.

Il problema è quando lo si utilizza nell'espressione runtimepath impostata, non funziona quando chiamo vimscript nel terminale che chiama script.vim. Quando eseguo set rtp in vim dopo essere stato chiamato da vimscript per controllare il runtimepath, la stringa aggiunta desiderata non viene mostrata (ma gli altri sono lì).

risposta

16

Ho alcune aggiunte @Laurence Risposta di Gonsalves:

  1. C'è anche «concat e assegnare» operator: .=, così

    let foo=foo.bar 
    

    può essere riscritta come

    let foo.=bar 
    
  2. Codice

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

    aggiungerà ,'/some/path' a & runtimepath, mentre probabilmente è necessario ,/some/path .

  3. Immagino di voler aggiungere il percorso al tuo script a runtimepath. Se è vero, allora il codice dovrebbe essere scritto come

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

    all'interno di uno script, o

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

    dalla sessione di modifica corrente (supponendo che si sta modificando lo script nel buffer corrente).

+0

il tuo approccio è migliore IMO, usare il sostituto era davvero brutto quando è possibile utilizzare i parametri di espansione. Grazie. –

2

Il sito di destra di un comando set non è un'espressione, è una stringa letterale.

È possibile modificare le opzioni (gli elementi set) utilizzando let e prefiggendo il nome dell'opzione con un &. ad esempio:

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

da aggiungere a runtimepath con una let si può fare qualcosa di simile: (. Il . è l'operatore di concatenazione di stringhe)

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

+0

Penso di aver bisogno di leggere tutta la documentazione di Vim e alcuni libri per comprendere tutti questi concetti. Ho provato la seconda opzione, ma ancora non funziona: ora, invece di stringa (sostituisci (espandi (ho '' quando eseguo set rtp. Cosa mi manca? –

+0

@Somebody L'espressione che hai incluso 'stringa() ', che non dovrebbe avere.(Avevo appena copiato la tua espressione letteralmente nel giusto schema.) Ho aggiornato la risposta per usare la forma corretta della tua espressione. Probabilmente potrebbe essere ancora semplificato, come ha fatto ZyX, ma questo dovrebbe almeno metterti sulla buona strada. –

+0

@Somebody BTW, non ho mai letto un libro di vim. ': help' in vim è in realtà abbastanza buono, ma ci sono un sacco di angoli e fessure. Utilizzo Vim da oltre un decennio e continuo a imparare cose nuove su base regolare. –

Problemi correlati