STDIN 파일의 vimgrep?

STDIN 파일의 vimgrep?

나는 파일과 그 grep내용을 열고 싶습니다:

$ vim file
:vimgrep PATTERN %
:cwin

(set mouse=a)이제 클릭하여 결과를 전환할 수 있는 멋진 버퍼가 생겼습니다 .

그러나 이는 STDIN 입력에는 적용되지 않습니다. 예를 들어:

$ printf "hello\nworld\n" | vim - 
:vimgrep hello %

빈 파일 이름 오류가 발생합니다.

vimgrepSTDIN 또는 이와 동등한 기능을 어떻게 사용합니까 ?

답변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")

관련 정보