Vim에서 파일 찾기 (재귀 적 디렉토리 검색을 통해)
Vim에서 파일을 재귀 적으로 검색하는 방법이 있습니까 (필요할 때 와일드 카드 사용)? 네이티브가 아니라면이를 처리 할 수있는 플러그인이 있습니까?
:edit
명령에 와일드 카드를 사용할 수 있습니다 . 그래서,
:e **/test/Suite.java
현재 디렉토리 계층 구조에 상관없이 test / Suite.java를 엽니 다. 이것은 탭 완성과 함께 작동하므로 파일을 열기 전에 [tab]을 사용하여 와일드 카드를 확장 할 수 있습니다. 대신 가능한 모든 확장을 탐색하는 방법 은 wildmode 옵션을 참조하십시오 .
또 다른 트릭은
:r! find . -type f
현재 디렉토리의 모든 파일 목록을 버퍼로로드합니다. 그런 다음 모든 일반적인 vim 텍스트 조작 도구를 사용하여 목록을 탐색 / 정렬 / 자르고 CTRL+W gf
새 창에서 커서 아래에 파일을 열 수 있습니다.
찾기 명령이 있습니다. **
경로에 추가 하면 재귀 적으로 검색 할 수 있습니다.
:set path
현재 경로를 표시하고 다음과 같이 **를 추가합니다.
:set path=.,/usr/include,,**
**
이니셜에서 복사 하기 전의 비트:set path
그런 다음 입력 할 수 있습니다.
:find myfile.txt
마법처럼 열립니다!
.vimrc에 set 명령을 추가하면 나중에 재귀 검색을 수행 할 수 있습니다. 도트 디렉토리 (예 : .ssh)를 검색하지 않는 것 같습니다.
ctrlp.vim을 추천 합니다 . 큰 프로젝트에서 작업하기에 이상적인 매우 좋은 플러그인입니다. 파일 이름 또는 전체 경로로 검색, regexp 검색, 프로젝트 루트 (.git | hg | svn | bzr | _darcs 폴더가있는 루트) 자동 감지, 개인화 된 파일 이름 제외 등이 있습니다.
누르기 만하면 <c-p>
원하는 것을 검색 할 수있는 매우 직관적 인 창이 열립니다.
한 번에 여러 파일을 선택하고 열 수 있습니다. 또한 특정 줄로 이동, 문자열 발생 또는 기타 Vim 명령과 같은 추가 임의 명령을 허용합니다.
리포지토리 : https://github.com/kien/ctrlp.vim
vim은 내장 찾기 명령 (: help find)으로 사용되지만 처음 찾은 파일 만 엽니 다. 그러나이 놀라운 플러그인을 사용할 수 있습니다 : FuzzyFinder 는 원하는 모든 것을 수행합니다.
Command-T를 사용하면 문자를 입력하는 것만으로도 파일을 매우 빠르게 찾을 수 있습니다. 새 탭에서 파일을 열 수도 있지만 루비 지원으로 컴파일 된 vim이 필요합니다.
당신이 사용할 수있는 ! 쉘 명령을 실행하려면 다음을 수행하십시오.
:! find . -name *.xml
를 사용하여 파일 시스템을 탐색 할 수 :ex .
있지만 재귀 적으로 검색하는 방법을 모르겠습니다 (저는 Vim 초보자입니다. 10 년 밖에 사용하지 않았습니다).
몇 가지 인기있는 파일 브라우저 플러그인이 있습니다.
SuperUser에 대한이 스레드를 참조하십시오 .
내가 가장 좋아하는 vim 플러그인 중 하나의 Command-t 는 FZF와의 통합 위의 루비 기반 플러그인 입니다.
Comamnd-T 및 FZF를 사용하면 매우 빠른 "퍼지"메커니즘으로 검색을 수행 할 수 있습니다.
- 파일 및 버퍼 열기
- 태그 및 도움말로 이동
- 실행 명령 또는 이전 검색 및 명령
- 최소한의 키 입력으로.
보시다시피
나는 항상 새 터미널을 열고 다음을 눌러 명령 기록에서 검색합니다.
CTRL+R
터미널 탭에 작성하여 모든 폴더를 재귀 적으로 검색하는 것 외에도 :
fzf
또한 내부에 쓸 수 있습니다. vim
:CommandT
정말 강력하고 빠릅니다.
vim은이를 수행 할 수있는 grep, lgrep, vimgrep 또는 lvimgrep 명령에 bild가 있습니다.
여기에 그것들을 사용하는 방법에 대한 튜토리얼이 있습니다 http://vim.wikia.com/wiki/Find_in_files_within_Vim#Recursive_Search
다음과 같이 실행하여 vim에서 find 또는 grep과 같은 외부 명령을 사용할 수도 있습니다.
:!find ...
아직 아무도 Unite.vim을 언급하지 않았다는 것에 놀랐습니다 .
파일 찾기 (모호하게 또는 기타)는 개발자가 할 수있는 일에 대한 빙산의 일각 일뿐입니다. 그것은에 대한 지원이 포함되어 있습니다 ag
, git
및 기타 프로그램 / 유틸리티 / 정력 플러그인의 무수한. 학습 곡선은 약간 가파르지만 그것 없이는 내 삶을 상상할 수 없습니다. 사용자 기반이 크고 버그가 즉시 수정됩니다.
Quickfix와 유사한 결과 탐색
용법:
Find my.regex
결과:
- 새 탭이 열립니다
- each line contains a relative path that matches a
grep -E
regex - hit:
<enter>
or<C-w>gf
to open the file on the current line in a new tabgf
to open the file on the current tab and lose the file list
Find all files instead:
Find
Alternative methods:
Gfind my.regex
: only search for Git tracked files (git ls-files
). Fugitive request: https://github.com/tpope/vim-fugitive/issues/132#issuecomment-200749743Gtfind my.regex
: likeGfind
, but search from the git Top level instead of current directoryLocate somefile
:locate
version
Code:
function! Find(cmd)
let l:files = system(a:cmd)
if (l:files =~ '^\s*$')
echomsg 'No matching files.'
return
endif
tabedit
set filetype=filelist
set buftype=nofile
" TODO cannot open two such file lists with this. How to get a nice tab label then?
" http://superuser.com/questions/715928/vim-change-label-for-specific-tab
"file [filelist]
put =l:files
normal ggdd
nnoremap <buffer> <Enter> <C-W>gf
execute 'autocmd BufEnter <buffer> lcd ' . getcwd()
endfunction
command! -nargs=1 Find call Find("find . -iname '*'" . shellescape('<args>') . "'*'")
command! -nargs=1 Gfind call Find('git ls-files | grep -E ' . shellescape('<args>'))
command! -nargs=1 Gtfind call Find('git rev-parse --show-toplevel && git ls-files | grep -E ' . shellescape('<args>'))
command! -nargs=1 Locate call Find('locate ' . shellescape('<args>'))
Depending on your situation (that is, assuming the following command will find just a single file), perhaps use a command like:
:e `locate SomeUniqueFileName.java`
This will cause Vim to open, in the current tab (the e command) a file that is the result of running (in this example),
locate SomeUniqueFileName.java
여기서 마법은 명령 주위의 백틱으로, 쉘 명령의 출력을 Vim 명령에서 사용할 수있는 텍스트로 변환합니다.
이 기능에만 플러그인이 필요하지는 않습니다. 아래 코드 스 니펫이면 충분합니다.
function! FindFiles()
call inputsave()
let l:dir = input("Find file in: ", expand("%:p:h"), "dir")
call inputrestore()
if l:dir != ""
call inputsave()
let l:file = input("File name: ")
call inputrestore()
let l:nf = 'find '.l:dir.' -type f -iname '.l:file.' -exec grep -nH -m 1 ".*" {} \;'
lexpr system(l:nf)
endif
endfunction
nnoremap <silent> <leader>fo :call FindFiles()<CR>
이 플러그인을 사용하면 "경로"에서 파일을 재귀 적으로 찾을 수 있습니다 . 파일 이름에 대한 탭 완성도 지원합니다.
ag 도구와 해당 Ag vim 플러그인은이 문제를 완벽하게 해결합니다.
패턴을 사용하여 파일을 찾으려면 다음을 사용하십시오.
AgFile! pattern
선택할 수있는 결과가 포함 된 빠른 수정 창이 열립니다.
선택한 단어를 패턴으로 사용하여이 명령을 호출하도록 vim 키 바인딩을 추가 할 수 있습니다.
nnoremap <silent> <C-h> :AgFile! '<C-R><C-W>'<CR>
vnoremap <silent> <C-h> y :AgFile! '<C-R>"'<CR>
참고 URL : https://stackoverflow.com/questions/3554719/find-a-file-via-recursive-directory-search-in-vim
'development' 카테고리의 다른 글
Eclipse“Link with Editor”에 해당하는 IntelliJ IDEA (0) | 2020.10.23 |
---|---|
드롭 다운 목록 / 선택에 optgroup 중첩 (0) | 2020.10.23 |
C ++의 문자열에서 파일 확장자를 얻는 방법 (0) | 2020.10.22 |
NSDate를 사용하여 요일 가져 오기 (0) | 2020.10.22 |
iOS 8 앱에서 상태 표시 줄 숨기기 (0) | 2020.10.22 |