나는 파일과 그 grep
내용을 열고 싶습니다:
$ vim file
:vimgrep PATTERN %
:cwin
(set mouse=a)
이제 클릭하여 결과를 전환할 수 있는 멋진 버퍼가 생겼습니다 .
그러나 이는 STDIN 입력에는 적용되지 않습니다. 예를 들어:
$ printf "hello\nworld\n" | vim -
:vimgrep hello %
빈 파일 이름 오류가 발생합니다.
vimgrep
STDIN 또는 이와 동등한 기능을 어떻게 사용합니까 ?
답변1
이 명령에는 vimgrep
도움말 기반 파일 매개변수가 필요합니다.
:vim[grep][!] {pattern} {file} ...
Search for {pattern} in the files {file} ... and set
the error list to the matches. Files matching
'wildignore' are ignored; files in 'suffixes' are
searched last.
printf ... | vim -
예제와 함께 사용 하려고 하면 오류가 다음과 같이 표시됩니다.
E499: '%' 또는 '#'은 빈 파일 이름이며 ":p:h"에만 적용 가능합니다.
이는 %
에서 여는 모든 파일에 대한 약식 표기법입니다 vim
. STDIN으로 파이핑하면 파일이 없기 때문에 원하는대로 할 수 없습니다.
검색을 통해 검색하는 경우 vim
기본적으로 3가지 방법이 있습니다.
- :vimgrep
- :grep
- /
vimgrep
내에서 파일을 grep하도록 설계되었습니다 vim
. :grep
시스템 버전을 호출하여 grep
로컬 파일을 검색하거나 호출한 디렉토리에서 파일을 검색할 수 있습니다 vim
. 이는 /현재 활성화된 버퍼 내에서 검색하는 것입니다 vim
.
세 번째 옵션은 STDIN을 통해 콘텐츠로 채워진 버퍼에서 검색하는 시나리오에 적합합니다.
임시 파일 설명자
대안으로, 임시 파일 설명자를 생성하여 쉘이 임시 파일 설명자를 생성하고 STDIN을 통해 해당 임시 파일 설명자의 콘텐츠를 보내도록 할 수 있습니다.
$ vim <(...)
다음과 같이 볼 수 있습니다.
$ ls -l <(echo hi)
lr-x------ 1 root root 64 Aug 2 22:15 /dev/fd/63 -> pipe:[738943]
따라서 다음과 같이 위의 하위 셸을 사용하여 STDIN을 통해 데이터를 보내는 대신 vim
콘텐츠가 파일에서 온 것처럼 믿도록 콘텐츠를 속일 수 있습니다.<(..)
$ vim <(...cmds...)
인용하다
답변2
vim <(printf "hello\nworld\n")