Vim은 파일 목록이 있는 파일을 수락한 다음 Quickfix 목록에서 파일을 여는 멋진 옵션을 지원합니다. 대략적인 예를 들면, ~에서 1KB보다 작은 모든 파일을 찾아 Vim에 전달합니다.
find ~ -type f -size -1k > /tmp/1 && vim -q /tmp/1
나는 이것을 zsh 접미사 별칭으로 사용하고 싶습니다.
alias V='> /tmp/1 && vim -q /tmp/1'
따라서 다음을 수행할 수 있습니다.
find ~ -type f -size -1k V
나는 몇 가지 편의 접미사를 사용했습니다.
alias -g H='| head -n'
alias -g X='| xargs -d"\n"'
따라서 다음을 수행할 수 있습니다.
git log H 5
드디어 가까워지네요질문그 자체.
mktemp
나를 슬프게 하는 것은 임시 파일을 만드는 데 사용할 수 없다는 것입니다 . 어리석은 멍청한 쉘 스크립팅 트릭을 모두 시도했습니다.
find . | tee QL=$(mktemp) && vim -q $QL
해결책이 너무 간단하다고 생각하면 부끄럽습니다.
현재 나는 다음을 사용합니다:
find ... | xargs -d"\n" vim --
그러나 이것은 버퍼 목록만 채우고 위치 목록의 Quickfix는 채우지 않습니다. Vim에 -c
이 작업을 수행하는 명령을 전달할 수 있다고 생각했음에도 불구하고 말이죠. "Vim: 경고: 입력이 터미널에서 오지 않았습니다."라는 경고가 표시되고 Vim을 종료한 후 나중에 인쇄하는 ^D
^M
대신 터미널이 실패합니다. 이 문제 는 에 추가하여 해결할 Ctrl-C
Ctrl-D
수 있지만 Vim 자체에서는 Tab 및 Backspace 키가 Ex Underperforming 상태입니다. 매우 짜증나는 모드입니다.ttyctl -f
.zshrc
답변1
귀하가 게시한 내용이 지금까지 귀하에게 효과가 있는 한,
find ~ -type f -size -1k > /tmp/1 && vim -q /tmp/1
설치 중간 파일을 제거 > /tmp/1 &&
하고 /tmp/1
이것이 효과가 있는지 확인하고 싶을 뿐입니다.
vim -q <( find ~ -type f -size -1k )
설명하다
find
원본 코드에서 특정 기준을 사용하여 필요한 파일 목록을 생성한 다음 해당 목록에 저장하는 것처럼 보입니다 . 이는 파일 인수가 필요하므로 수행할 수 있는/tmp/1
중간 파일일 뿐입니다.vim -q filelist
vim -q
<( commands... )
배쉬 중 하나입니다프로세스 교체/dev/fd/63
, 궁금한 경우 자동으로 명령을 실행하고 출력을 시스템 임시에 저장합니다.vim -q
그런 다음 파일을 가져오고 있다고 생각하고 모든 의도와 목적에 따라 실제로 파일이 있으므로 작동합니다.
추가 팁
vim의 빠른 수정 기능을 꼭 사용할 필요는 없지만 여러 파일을 빠르게 편집하는 방법을 원한다면 vim( vim file1 file2...
)에 여러 파일 인수를 보낼 수 있으므로 원본 파일을 수정하면 다음을 find
수행할 수 있습니다.
find ~ -type f -size -1k -exec vim {} +
vim에서
:args
매개변수 목록이 상태 표시줄에 표시됩니다. 예를 들어file1 [file2] file3
현재 편집 중인 경우file2
:n
매개변수 목록에서 다음 파일로 이동:wn
다음 쓰기는 파일을 저장하고 자동으로 다음 파일을 여는 것을 의미합니다.:prev
이전 파일로 이동
답변2
오랜 시간이 흐른 후, 이제 나는 내 질문에 답할 수 있게 되었습니다.
위에서 아래로:
alias -g V='| tee $(rm fifo.tmp; mkfifo fifo.tmp && echo fifo.tmp) &; vim $(< fifo.tmp ) && rm fifo.tmp'
이는 다음을 허용하는 zsh 별칭입니다.
find . -name TODO V
또는
ls | grep asciidoc V
그리고 Vim에서 모든 파일을 버퍼로 엽니다.
어쨌든 이것은 없이는 작동하지 않습니다 . 예를 들어 로 tee
바꾸면 Vim에서 버퍼가 열리지 않습니다.| tee
>
여기서 하는 일은 이라는 파이프를 생성하고 fifo.tmp
, tee
이전 명령의 출력을 파이프로 리디렉션하고 동시에 백그라운드로 보내는 것입니다. 동시에 서브셸에서 해당 파이프를 읽고 출력을 Vim 파일 목록으로 엽니다.
그러나 공백이 포함된 파일 이름에는 작동하지 않습니다.