Option `set` mit Variablen


8

Ich versuche neu zu schreiben und der Option einen String mit Variable hinzuzufügen. Die ursprüngliche Zeichenfolge ist

set rtp+=~/.vim/bundle/Vundle.vim

Das Folgende ist die Arbeitsweise let:

let MYVIMDIR='/home/loom/foo'
let &rtp .= ','.expand(MYVIMDIR).'/bundle/Vundle.vim'

Ich bin interessiert, wie ich es umschreibe set. Der folgende Code (und einige andere Variationen) funktioniert nicht

let MYVIMDIR='/home/loom/foo'
set rtp+=expand(MYVIMDIR).'/bundle/Vundle.vim'

Was ist der richtige Weg, um Variablen im Ausdruck zu verwenden set?

Antworten:


9

Sie könnten verwenden :exe, aber dies ist äußerst umständlich zu verwenden und Sie müssen ein paar Dinge entkommen.

Ich habe früher meine eigene Pfadfixierungsfunktion verwendet. Es sah aus wie:

exe 'set rtp+='.lh#path#fix(somevariable)
" with standard tools, may be it'd be (untested)
exe 'set rtp+='.escape(somevariable, ' \|,')

let &rtp = expression ist wirklich unser Freund.

Aber in der Tat spielt es nicht gut mit +=. Deshalb habe ich mir lh#path#munge()das ausgedacht, das auf einer anderen Funktion beruht lh#list#add_if_new(). Genau genommen set +=wird von emuliert lh#list#add_if_new(). munge()behält vorhandene Pfadnamen oder Globbing-Muster bei, die mit den Dingen übereinstimmen.

" Function: lh#path#munge(pathlist, path) {{{3
function! lh#path#munge(pathlist, path) abort
  if type(a:pathlist) == type('str')
    let pathlist = split(a:pathlist, ',')
    return join(lh#path#munge(pathlist, a:path), ',')
  else
    " if filereadable(a:path) || isdirectory(a:path)
    if ! empty(glob(a:path)) " support '/**' for &tags
      call lh#list#push_if_new(a:pathlist, a:path)
    endif
    return a:pathlist
  endif
endfunction

" Function: lh#list#push_if_new(list, value) {{{3
function! lh#list#push_if_new(list, value) abort
  if index(a:list, a:value) < 0
    call add (a:list, a:value)
  endif
  return a:list
endfunction

Sie werden in lh-vim-lib definiert und verwaltet .


1
Sie müssen auch Kommas in der: Set Call
Christian Brabandt

4

Sie können eine Umgebungsvariable verwenden, die in Ihrer aktuellen Shell-Sitzung definiert ist.

let $myvimdir = '/home/abc/vimfiles'

Auf diese Weise können Sie auch andere Variablen verwenden, um den Pfad zu erstellen:

let $myvimdir = $HOME.'/vimfiles'

Und legen Sie den Laufzeitpfad fest:

set rtp+=$myvimdir/bundle/Vundle.vim

Weitere Informationen zu Umgebungsvariablen in vim : help expr-env


1
Interessant. Aber wenn ich es versuche let $nts | set ts=$nts, mag es vim nicht.
22.

Dies liegt daran, dass Umgebungsvariablen als Zeichenfolgen gespeichert werden und tabstop eine Zahl erwartet.
Iznav
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.