파일을 찾아 임시 파일로 보내기

파일을 찾아 임시 파일로 보내기

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 filelistvim -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 파일 목록으로 엽니다.

그러나 공백이 포함된 파일 이름에는 작동하지 않습니다.

관련 정보