여러 파일을 "찾고" vim에서 여는 방법은 무엇입니까?

여러 파일을 "찾고" vim에서 여는 방법은 무엇입니까?

이라는 파일이 있다고 가정해 보겠습니다. filename123.txt이 파일은 이름이 지정되어 있으므로 locate명령을 사용할 수 있습니다 locate filename123. 이 파일이 반환됩니다.

vi이제 / 로 열고 싶습니다 vim. 하지만 해당 위치로 가서 vi명령과 파일 이름을 입력하고 싶지는 않습니다 . 여기서는 locate filename123vi 명령에 결과를 추가하고 싶습니다 . 어떻게 해야 하나요? 난 노력 했어:

locate filename123 | vi

그러나 이것은 작동하지 않습니다. 이 오류는 터미널에 나타납니다.

santosh@santosh:~$ locate filename123 | vi
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: Finished.

답변1

당신은 그것을 사용할 수 있습니다 xargs:

locate filename123 | xargs vi

기본적으로 xargs지정된 명령의 인스턴스를 가능한 한 적게 실행하고 시스템에 적절한 인수를 전달합니다.ARG_MAX. 인스턴스에 전달되는 인수 수를 제한하려면 ' 옵션을 vi사용하십시오 .xargs-n

공백이 포함된 파일 이름을 처리하려면 xargs' -d옵션을 사용하십시오.

locate filename123 | xargs -d '\n' vi

개행 문자가 포함된 파일 이름을 처리하려면 xargs' -0옵션과 locate's -0옵션을 사용하십시오.

locate -0 filename123 | xargs -0 vi

( 또한 -0이들 중 사용할 수 없는 것이 있는지 --null확인 하거나 다른 방법을 사용하여 문자를 \000구분 기호로 지정하십시오.)

답변2

명령 확장을 사용할 수 있습니다.

vi "$(locate filename123 | head -n1)"

표준 입력을 읽으 려면 vim다음을 수행할 수 있지만 이렇게 하면 파일 이름 path 출력만 제공됩니다 vim -. 일반 명령을 사용하면 커서가 있는 경로가 열리므로 locate작동할 수 있습니다 .vim gf

편집하다

xargs파일 이름에 공백이 포함된 경우 언급된 옵션이나 vim위의 해결 방법을 사용하는 것이 좋습니다 . 이것이 gf작동하려면 공간을 추가해야 합니다 isfname.

set isfname+=32

이 기술과 대안이 설명되어 있습니다.여기.

편집 2

인용문을 추가하고 headPeterO의 제안을 따랐습니다.논평.

답변3

가장 간단한 방법은 다음 locate과 같이 전달하는 것입니다.쉘 교체, 좋다:

vim $(locate filename123)

편집을 위해 파일 이름을 전달하는 find대신 사용을 고려할 수도 있습니다 . 예를 들면 다음과 같습니다.locate

find . -name 'filename123' -exec vim {} +

xargsUnix/OSX에서는 다음과 같은 매개변수를 사용할 수 있습니다 -o.

locate filename123 | xargs -o vim

-o명령을 실행하기 전에 하위 프로세스에서 /dev/tty로 stdin을 다시 엽니다. 이는 xargs가 대화형 응용 프로그램을 실행하도록 하려는 경우 유용합니다.

또는 Linux에서 다음 해결 방법을 시도해 보세요.

locate filename123 | xargs -J% sh -c 'vim < /dev/tty $@'

다른 명령을 사용하는 경우 다음을 사용하십시오.명령 대체이를 달성하려면 예를 들어 다음과 같습니다.

vim $(locate filename123)
vim `locate filename123`

또는 tty 할당을 강제하는 parallel대신 GNU를 사용하십시오. 예를 들면 다음과 같습니다.xargs

locate filename123 | parallel -X --tty vi

참고: parallelUnix/OSX에서는 매개변수가 다르고 tty를 지원하지 않으므로 작동하지 않습니다.

다른 많은 인기 있는 명령도 의사 tty 할당(예: -t) 을 제공하므로 ssh도움말을 확인하세요.

다른 제안은 다음과 같습니다.vipe(Vim 명령 파이프라인) 또는 다음 간단한 스크립트를 사용하세요.

#!/bin/sh
# usage: locate filename123 | vip
exec vim < /dev/tty "$@"

관련된:

관련 정보