[fish] awk의 스크립트 부분을 히스토리에서 보완
소개
awk
의 사용법이 우울한 기억으로, 그렇다면 어떻게 할까? 다시 검색하는 것이 많았기 때문에 어떻게든하고 싶다.peco
그리고 과거의 awk
이력을 찾는 것도 있지만, fish
그래서 보완으로 해결할 수 있으면 좋지 않을까? 라고 생각하고 보완 써 보았습니다.완성 설정
보완 설정은 다음과 같이 했다.
~/.config/fish/completions/awk.fish
function __complete_awk_is_quoted # 入力中の語は ' か?
test (commandline -tc) = \'
end
function __complete_awk_quoted_expr # awk '...' を履歴から探して ... の部分を返す
builtin history \
| string match -r "awk +'(?:\\'|[^'])+'" \
| awk '{$1=""; print $0}' \
| string trim \
| string trim -c\'
end
complete -xc awk -n __complete_awk_is_quoted -a '(__complete_awk_quoted_expr)'
# デフォルトの補完メッセージが長々しいので上書き
complete -c awk -s f -d 'awk program file'
complete -xc awk -s F -d 'input field separator'
complete -xc awk -s v -d 'var=value'
마지막 4행은 본제와 관계 없기 때문에 기호로.
이것을 정의한 상태에서
awk '
를 입력하고 Tab
를 누르면 과거에 사용한 awk 스크립트가 보완됩니다.기타
Q. '의 입력은 필수?
필수적입니다.
사실은
awk
까지 치고 Tab
를 누르면 보완할 수 있도록 하고 싶었습니다만, 보완 후보로 예를 들어 '{print $0}'
를 설정하면 '
이 이스케이프 되어 \'{print\ \$0}\'
awk '
까지 쳐 둘 필요가 있습니다.Q. peco 같은 좁히고 싶지만
fish
그러면, Tab
대신에 Shift + Tab
로 보완 모드에 들어가면 부분 일치 검색할 수 있습니다.결론
awk
의 부분을 sed
로 하면 sed
도 마찬가지로 보완할 수 있을 것 같습니다. 다만, 이번의 보완 함수에서는 더블 쿼테이션으로 건네진 인수는 주워지지 않기 때문에 개량이 필요할지도.grep
의 검색 조건도 보완할 수 있을 것 같습니다만 grep
는 옵션도 지정되어 있는 것이 많기 때문에, 히스토리로부터 커멘드를 추출하는 부분에도 개량이 필요하네요...추가 (2017/08/18)
awk '{print
와 같이, 도중까지 커맨드를 친 상태에서도 보완이 효과가 있게 했습니다. string
커맨드 대활약.function __complete_awk_is_quoted # 文字列の入力中か?
string match -- "'*" (commandline -tc)
end
function __complete_awk_quoted_expr # awk '...' を履歴から探して入力中の語を含む ... を返す
set -l input (string sub -s 2 (commandline -tc))
builtin history \
| string match -r "(?<=awk ) *'(?:\\'|[^'])+'" \
| string trim \
| string trim -c\' \
| string match "*$input*"
end
complete -xc awk -n __complete_awk_is_quoted -a '(__complete_awk_quoted_expr)'
Reference
이 문제에 관하여([fish] awk의 스크립트 부분을 히스토리에서 보완), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryotako/items/809b43e7085142cc69fe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)