2017-11-15 6 views
0

내 질문은 내가이정력 + fzf.vim - 프로젝트 루트를 지정 : 파일

nnoremap <leader>t :ProjectRootExe Files<CR>

같은 프로젝트 루트에서 :Files을 여는 키 매핑이 fzf.vim

vim-projectroot의 사용에 관한 것입니다 그러나 문제는 set autochdir을 방해하고 있다는 것입니다. 내가 새로운 세션을 :e/:sp/:vsp으로 강제하지 않으면 이전의 디렉토리와 동일하게 유지됩니다.

그래서 나는이

function Guess() 
    return projectroot#guess() 
endfunction 

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

처럼 :Files path에 두 번째 인수로 디렉토리를 전달하는하지만 내가 사용 작업을 얻을 수 없습니다입니다 알아낼 수 없습니다 분명한 이유 생각했다. vim 매핑에서 함수의 출력과 명령을 결합해야한다고 어떻게 지정할 수 있습니까?

원하는 것은 :Files output_of_Guess()입니다.

답변

1

Vim의 평가 규칙은 대부분의 프로그래밍 언어와 다릅니다. 변수 (또는 표현식)를 계산하려면 :execute을 사용해야합니다. 그렇지 않으면 문자 그대로 받아 들여집니다. 즉 Vim은 함수 이름 자체를 인수로 사용합니다.

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

:help :map-expr;

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

이 내가'nnoremap 톤를 사용하여 결국 무엇을 : 그것은 기본적으로 :map의 변형에 내장 :execute의 내가 중 하나를 가지고있는이 사용 grepping를 들어 '파일'ProjectRootGuess() ' 을 실행 fzf.vim의 문제 '''명령! -nargs = * Rag \ call fzf # vim # ag (, extend (s : with_git_root(), { 'down': '~ 40 %'}) ''' – Jithin