@muru가 언급했듯이 경로 및 파일 이름을 완성 할 디렉토리를 구성하는 옵션이 없습니다. 항상 창의 작업 디렉토리를 사용합니다.
이를 위해 몇 가지 함수와 매핑을 작성했습니다. 이면에서 로컬 작업 디렉토리 ( :lcd
)를 일시적으로 변경 한 다음 완료되면 이전 작업 디렉토리를 복원합니다.
코끼리
나조차 모르는 이유로, 나는이 마이크로 플러그인 Elephant 이라고 불렀다 .
코드는 다음과 같습니다 ( GitHub의 Vim 설정에서 복사했습니다 ).
let g:elephant_map = {
\ 'f': function('elephant#current_file'),
\ 'p': function('elephant#vcs_project')
\ }
function! elephant#prompt(base)
let l:Fcn = get(g:elephant_map, a:base, function('elephant#identity'))
let l:basedir = l:Fcn()
execute 'lcd' l:basedir
let l:file = fnamemodify(input(l:basedir.'/', '', 'file'), ':p')
lcd -
return fnamemodify(l:file, ':.')
endfunction
function! s:elephant_init()
let l:base = getchar()
return elephant#prompt(nr2char(l:base))
endfunction
function! elephant#identity()
return '.'
endfunction
function! elephant#vcs_project()
return fnamemodify(finddir('.git', '.;'), ':h')
endfunction
function! elephant#current_file()
return expand('%:h')
endfunction
inoremap <silent> <expr> <C-R><C-E> <SID>elephant_init()
cnoremap <silent> <C-R><C-E> <C-R>=<SID>elephant_init()<CR>
사용 방법
이러한 매핑 사용은 3 단계로 이루어집니다.
1. 매핑을 호출
삽입 모드 또는 명령 행 모드에서을 사용하여 맵핑을 호출하십시오 <C-R><C-E>
.
2. 디렉토리를 선택하십시오
완료 할 루트 디렉토리를 선택하려면 단일 문자를 입력하십시오. 위의 코드는 두 가지 유형의 루트를 제공합니다.
f
-현재 파일 (버퍼)이있는 디렉토리
p
-현재 파일이 속한 Git 프로젝트의 기본 디렉토리
3. 경로 또는 파일 이름을 입력하십시오
지정된 디렉토리에 상대적인 경로 또는 파일 이름을 입력하라는 메시지가 표시되며 완료 할 수 있습니다. Enter
완료되면 누릅니다 .
일부 노트
- 삽입 모드에서는 인라인 완성 기능을 제공하지 않습니다
<C-X><C-F>
. 대신 명령 행 프롬프트 ( :
명령이 있는 위치)에 경로 또는 파일 이름을 입력하게됩니다 . 를 누르면 Enter
경로가 버퍼에 삽입됩니다.
- 명령 행 모드에서도 마찬가지입니다 . 입력 할 때 명령을 실행하기 위해
Enter
계속 눌러야한다는 사실을 잊었을 때 혼동 될 수 있습니다 Enter
.
- 에 추가하여 다른 디렉토리 기능을 등록 할 수 있습니다
g:elephant_map
.
- 삽입 된 경로는 완전한 절대 경로입니다. 이 동작을 변경하기 위해 스크립트를 조정할 수는 있지만 나는 그 문제를 해결하지 못했습니다.
path
). vim-rooter의 용도에 따라 다릅니다. 당신이 원하는 것에 따라 다른 플러그인을 사용할 수 있습니다. 따로 : youcompleteme를 사용하는데, 입력을 시작하면 현재 버퍼의 디렉토리에서 경로를 완성합니다./
. reddit.com/r/vim/comments/216jdd/…