여러 파일을 찾아서 vim에서 여는 방법은 무엇입니까? 하나의 파일이고, 내가 할 수있는 locate명령으로

나는 파일 이름이 있다고 가정 filename123.txt하고 그렇게라는 하나의 파일이고, 내가 할 수있는 locate명령으로 그것을 locate filename123. 그리고이 파일 만 반환합니다.

이제 vi/ 로 열어보고 싶습니다 vim. 그러나 해당 위치로 이동하고 vi명령 뒤에 파일 이름을 입력하고 싶지 않습니다 . 여기 locate filename123에 vi 명령에 결과를 추가 하고 싶습니다 . 어떻게해야합니까? 나는 이미 시도했다 :

locate filename123 | vi

그러나 이것은 작동하지 않습니다. 이 오류는 터미널에서 발생합니다.

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



답변

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

locate filename123 | xargs vi

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

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

locate filename123 | xargs -d '\n' vi

줄 바꿈이 포함 된 파일 이름을 처리하려면 xargs-0옵션과 함께 locate-0옵션을 사용하십시오.

locate -0 filename123 | xargs -0 vi

( -0어느 것도 사용할 수없는 경우 , --null문자 \000를 구분자 로 지정하는 다른 방법도 확인하십시오 .)


답변

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

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

vimstdin을 읽으 려면 할 수 vim -있지만 출력 locate은 파일 이름 경로입니다. vim gf정상적인 명령을 사용 하면 커서가있는 경로가 열립니다.

편집하다

파일 이름에 공백이 있으면 xargs위에서 언급 한 옵션이나 vim솔루션 을 사용하는 것이 좋습니다 . 메이크업의에 참고 gf작품은 당신에게 공간을 추가해야합니다 isfname:

set isfname+=32

이 팁과 대안은 여기 에 설명되어 있습니다 .

편집 2

의견head 에 PeterO가 제안한대로 따옴표를 추가했습니다 .


답변

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

vim $(locate filename123)

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

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

Unix / OSX에서는 다음 과 같은 매개 변수 xargs와 함께 사용할 수 있습니다 -o.

locate filename123 | xargs -o vim

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

또는 Linux에서는 다음을 사용하여 다음 해결 방법을 시도하십시오.

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

다른 명령을 사용 하는 경우 다음과 같이 명령 대체 를 사용 하여이를 수행하십시오.

vim $(locate filename123)
vim `locate filename123`

또는 다음과 같이 tty 할당을 강제 parallel로 수행 xargs하는 대신 GNU 를 사용하십시오 .

locate filename123 | parallel -X --tty vi

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

잘 (등 다른 많은 인기 명령은 의사 청각 장애 할당을 제공 -t에서 ssh), 그래서 도움이 있는지 확인합니다.

다른 제안은 vipeVim 명령 파이프를 사용하거나 다음과 같은 간단한 스크립트를 사용하는 것입니다.

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

관련 :


답변