이것fzf 예제 위키 페이지fzf를 사용하여 디렉터리에 있는 모든 파일의 내용 내에서 퍼지 검색을 수행하는 방법을 설명합니다. 하지만 위키 페이지의 예에서는 다음과 같습니다.
ag --nobreak --nonumbers --noheading . | fzf
파일은 줄로 구분되며 각 줄은 개별적으로 처리됩니다.
예를 들어 파일은 다음과 같습니다.
hello
world
검색어 "hello world"는 검색어가 다른 줄에 있으므로 일치하지 않습니다.
줄 단위가 아닌 전체 파일을 검색하도록 fzf를 어떻게 사용합니까?
답변1
다소 더러운 해결책이 있습니다.
rg --heading --glob "*.txt" . some_directory_path | sed 's/^$/NEWLINEHEREYO/g' | tr '\n' ' ' | sed 's/NEWLINEHEREYO/\n/g' | fzf
설명하다:
당신이 할 때
rg .
어딘가에서 특정 형식으로 터미널에 출력을 인쇄하고, 어딘가로 파이프하려고 하면 해당 형식이 손실됩니다. 이 작업을 효과적으로 수행하려면 포맷이 필요하다는 것을 알았습니다. 따라서 --heading 플래그는 형식을 유지합니다. --glob 및 디렉토리는 내 사용 사례에서 실행했기 때문에 추가했으며 명령이 깨질 경우를 대비하여 명령을 수정하고 싶지 않았습니다. 저는 컴퓨터에 능숙하지 않습니다.
그런 다음 sed를 사용하여 파일을 구분하는 모든 빈 줄을 NEWLINEHEREYO 태그로 바꿉니다. 그런 다음 tr을 사용하여 모든 줄 바꿈(빈 줄을 끊음)을 자르고 원하는 한 줄의 출력을 제공합니다. 그런 다음 다른 sed 명령을 사용하여 NEWLINEHEREYO를 개행 문자로 다시 변환하여 fzf가 문자 그대로 단일 행인 것처럼 검색하지 않도록 하여 개행 문자를 다시 도입합니다.
이것은 매우 비효율적이지만 내 사용 사례에는 잘 작동합니다. 나는 sed, tr 및 sed 명령을 하나로 결합할 수 있다고 생각했지만 그렇게 하기에는 너무 어리석습니다.