![vim - 새 탭에서 특정 문자열이 포함된 파일 열기](https://rvso.com/image/1365800/vim%20-%20%EC%83%88%20%ED%83%AD%EC%97%90%EC%84%9C%20%ED%8A%B9%EC%A0%95%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%ED%8C%8C%EC%9D%BC%20%EC%97%B4%EA%B8%B0.png)
새 vim 탭에서 특정 문자열이 포함된 모든 파일을 여는 방법을 찾고 있습니다.
파일은 특정 디렉터리에 있지 않고 디렉터리 트리에 분산되어 있습니다.
이상적으로는 각 파일에서 문자열 일치 위치로 이동하고 싶습니다.
vim 내에서 실행될 수 있다면 더 좋습니다.
답변1
찾고 있는 내용은 정확히 아니지만 다음과 같이 문자열이 포함된 모든 파일을 찾을 수 있습니다.
:grep -r "string" directory
그런 다음 다음을 사용하여 결과를 찾아봅니다.
:copen
그러면 결과가 포함된 창이 열리고 quickfix
목록에서 위/아래로 이동할 수 있으며 키를 눌러 <CR>
새 버퍼의 일치하는 줄에 해당 파일을 로드할 수 있습니다.
그것은 grepping의 vim 방식입니다. 물론 :vimgrep
대신 사용하거나 다음을 사용할 수 있습니다.그렙 플러그인아니면 그플러그인 확인. ack 플러그인에는 결과 줄을 누르는 t
대신 새 탭에서 결과를 여는 기능이 있습니다 .<CR>
답변2
.vimrc 파일에 다음을 넣을 수 있습니다:
com! -nargs=+ PatternFilesToTabs call s:PatternFilesToTabs(<q-args>)
function! s:PatternFilesToTabs(pattern)
let savelz=&lz
let savlast=@#
let savfile=@%
let hash={}
let files=[]
sil! redir => result
exec 'sil! grep ' . a:pattern . ' -r .'
sil! redir end
for line in split(result, '\n')
if (match(line, ':\d\+:') > 0)
let filen=substitute(line, ':.*', '', '')
if (!has_key(hash,filen))
let hash[filen] = 1
let files += [ filen ]
endif
endif
endfor
for filen in files
exec 'sil! tabedit ' . filen
1
sil! call search(a:pattern)
endfor
exec 'sil! tabp ' . len(files)
exec 'sil! edit ' . savlast
exec 'sil! edit ' . savfile
let &lz=savelz
endfunction
답변3
bash 쉘에서 직접 쉘 glob 패턴 문자열이 포함된 파일을 열려면 "*backup-file.*.sh"
다음 oneliner를 사용하십시오(예, 작은따옴표를 준수하는 한 find 명령을 수정할 수 있습니다)
# in bash
vim -c ':args `find . -type f -name '\''*backup-file.*.sh'\''`'