Vim에서 플러그인이 없는 대화식 모호 찾기
카탈로그
개술
FZF는 훌륭한 명령행 모호 검색기이고 fzf.vim 플러그인도 Vim과 통합되어 일부 기능을 제공했다. 예를 들어
:Files
은 파일에 대해 모호 검색을 하고 :Rg
는 ripgrep
로 텍스트에 대해 모호 검색을 한다.그러나 최근에 나는 플러그인이 없는 Vim 설정을 시험해 왔다.
:find
어떤 용례로는 충분하지만, 새로운 프로젝트나 대형 프로젝트에서 깊이 박힌 파일을 찾기 위해 Vim을 종료하고 실행하는 것을 발견했다.명령행 프로그램과 명령행 편집기를 통합하는 간단한 방법이 있어야 합니다. 그렇습니까?
설정
이 설정은 간단하다.vim의 이름quickfix을 이용한 기능이다.
프로세스는 다음과 같습니다.
fzf
fzf
와 호환errorformat
또는 :cfile
결과를 Vim의 빠른 복구 목록에 로드하여 사용 가능 :cgetfile
/:cnext
또는 :cprevious
조회 결과function! FZF() abort
let l:tempname = tempname()
" fzf | awk '{ print $1":1:0" }' > file
execute 'silent !fzf --multi ' . '| awk ''{ print $1":1:0" }'' > ' . fnameescape(l:tempname)
try
execute 'cfile ' . l:tempname
redraw!
finally
call delete(l:tempname)
endtry
endfunction
" :Files
command! -nargs=* Files call FZF()
" \ff
nnoremap <leader>ff :Files<cr>
빠른 세분화::copen
let l:tempname = tempname()
:h tempname()
execute 'silent !fzf --multi ' . '| awk ''{ print $1":1:0" }'' > ' . fnameescape(l:tempname)
호출fzf
으로 여러 파일을 선택할 수 있음--multi
에 awk
fzf 결과에 추가하여 :1:0
를 호환시켰다.errorformat
이 당신의vimrc에서 이 awk
명령을 삭제할 수 있지만, 나는 set errorformat+=%f
가 다른 프로그램의 출력에서 많은 오보를 포획했기 때문에 %f
/:cnext
는 이 오보 결과에 영향을 미치지 않는다는 것을 발견했다.:cprevious
execute 'cfile ' . l:tempname
빠른 복구 목록에만 결과를 로드할 수 있습니다.:cgetfile
/:cfile
/:cgetfile
로 바꿀 수 있습니다.위치 목록은 창에 특정되며, 빠른 복구 목록은 전역적입니다.따라서vim 창마다 다른 결과 집합을 원한다면 :lfile
/:lgetfile
를 사용하십시오.:lfile
:lgetfile
call delete(l:tempname)
할 때 호출command! -nargs=* Files call FZF()
함수FZF()
:Files
로 이 흐름을 촉발할 수 있다보너스
nnoremap <leader>ff :Files<cr>
는 나의 대다수 용례로 충분하지만fzf에서 사용한 사람<leader>ff
은 충분하다.vim는 인터랙티브 모호 grepping 체험을 감상하고 vim에서 파일을 열기 전에 결과를 미리 볼 수 있는 능력을 제공합니다.여기에 순수한vim와 유사한 체험이 있다(분명히
:set grepprg=rg\ --vimgrep
와 :Rg
바이너리 파일은 여전히 필수적이다).function! RG(args) abort
let l:tempname = tempname()
let l:pattern = '.'
if len(a:args) > 0
let l:pattern = a:args
endif
" rg --vimgrep <pattern> | fzf -m > file
execute 'silent !rg --vimgrep ''' . l:pattern . ''' | fzf -m > ' . fnameescape(l:tempname)
try
execute 'cfile ' . l:tempname
redraw!
finally
call delete(l:tempname)
endtry
endfunction
" :Rg [pattern]
command! -nargs=* Rg call RG(<q-args>)
" \fs
nnoremap <leader>fs :Rg<cr>
이는 다음과 같은 경험을 제공합니다.fzf
매개 변수 없이vim에 모든 텍스트를 불러오고 사용자가 파일을 선택하기 전에 상호작용으로 결과를 입력하고 미리 볼 수 있도록 합니다rg
미리 여과한 결과만 일치하도록 :Rg
한 다음에 그것을 :Rg [pattern]
에 전달하여 더욱 모호한 검색을 진행한다.경고
나의 테스트에서 나는 주요한 경고가 나에게 큰 영향을 미치지 않았다는 것을 발견했지만 여전히 여기서 지적할 가치가 있다.
vim에서 앞머리로 셸 명령을 실행합니다. 예를 들어
[pattern]
는 상호작용을 의미하지 않습니다. (적어도 상자를 열면 바로 사용할 수 없습니다.)GVim/MacVim의 문제일 수 있습니다.vimdocs는 다음과 같은 해결 방법을 언급했다.On Unix the command normally runs in a non-interactive shell. If you want an interactive shell to be used (to use aliases) set 'shellcmdflag' to "-ic".
설정
fzf
은 셸의 시작/초기화 시간에 따라 시간 손실을 초래할 수 있습니다.요약
Vim은 공통적이며 사용자 정의가 가능합니다.
vim 개념에 대한 이해(예를 들어quickfix,
:!fzf
/shellcmdflag=-ic
와 약간(vim & bash) 스크립트를 통해 당신은 더욱 풍부한 체험과 유쾌한 통합을 얻을 수 있으며 당신과 당신의 업무 절차에 적합한 방식으로 생산력을 향상시킬 수 있습니다.나는 네가 이 글을 좋아하길 바란다. 나는vim에서 너의 생산력 기교와 기교를 개발하고 공유하도록 격려할 수 있기를 바란다.
해커!
Reference
이 문제에 관하여(Vim에서 플러그인이 없는 대화식 모호 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pbnj/interactive-fuzzy-finding-in-vim-without-plugins-4kkj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)