2017-11-15 1 views
0

Meine Frage ist, über die Nutzung von vim-projectroot mit fzf.vimvim + fzf.vim - angeben Projektstamm in: Dateien

ich einen Schlüssel-Mapping haben, die :Files an Projektstamm wie diese

nnoremap <leader>t :ProjectRootExe Files<CR>

eröffnet Aber das Problem ist, dass es mit set autochdir interferiert. Sofern ich keine neue Sitzung erzwinge mit :e/:sp/:vsp aktuellen Verzeichnis bleibt das gleiche vorherige Verzeichnis. So

Ich dachte an

zu :Files path wie dieses Verzeichnis als zweites Argument übergibt
function Guess() 
    return projectroot#guess() 
endfunction 

nnoremap <leader>t :Files Guess()<CR> 

aber aus offensichtlichen Gründen, die ich nicht herausfinden kann, ich bin nicht in der Lage, die Nutzung zum Laufen zu bringen. Wie kann ich in einem vim-Mapping angeben, dass es den Befehl mit dem Ausgang einer Funktion kombinieren soll?

Was ich will, ist :Files output_of_Guess() aufgerufen werden.

Antwort

1

Die Bewertungsregeln von Vim unterscheiden sich von den meisten Programmiersprachen. Sie müssen :execute verwenden, um eine Variable (oder einen Ausdruck) auszuwerten; sonst wird es wörtlich genommen; Vim verwendet den Funktionsnamen selbst als das Argument.

nnoremap <leader>t :execute 'Files ' . Guess()<CR> 

Eine Alternative für Zuordnungen ist :help :map-expr; das ist im Grunde :execute in der Variante von :map gebaut:

nnoremap <expr> <leader>t ':Files ' . Guess() . "\<lt>CR>" 
+0

Dies ist, was ich am Ende mit 'nnoremap t: ' Für greppen ich diese ‚Dateien‘ ProjectRootGuess() ausführen verwendet, die ich bekam von einem die Probleme in fzf.vim '' 'Befehl! -nargs = * Rag \ Aufruf fzf # vim # ag (, erweitern (s: with_git_root(), {'down': '~ 40%'})) '' ' – Jithin