【fzf】터미널상에서 파일명 검색과 전문 검색을 Preview 첨부로 하고 싶다
파일명 검색은 fzf로 준비되어 있는 KeyBind(Ctrl+T)를 커스터마이즈 합니다
$(brew --prefix)/opt/fzf/install
때 자동으로 설정합니다.widget 함수에 대한 자세한 내용은
/usr/local/opt/fzf/shell/key-bindings.zsh
에서 확인할 수 있습니다.메모를 쓰는 것 같습니다.
bat
, rg
, fd
) 사용 macOS
, zsh
에서의 동작 만 확인했습니다 junegunn/fzf: A command-line fuzzy finder
man page
그 전에 내 fzf default option입니다. --height 는 지정이 있는 쪽이 보기 쉽고 좋아합니다. .zshrc export FZF_DEFAULT_OPTS=" --height 90% --reverse --border --prompt='➜' --margin=0,1 --inline-info --tiebreak=index --no-mouse --filepath-word --color fg:-1,bg:-1,hl:33,fg+:250,bg+:235,hl+:33 --color info:37,prompt:37,pointer:230,marker:230,spinner:37 --bind='ctrl-w:backward-kill-word,ctrl-x:jump,down:preview-page-down' --bind='ctrl-z:ignore,ctrl-]:replace-query,up:preview-page-up' --bind='ctrl-a:toggle-all,?:toggle-preview' " bindkey의 설정에 대해서는 여기
개행 있어 Text가 개인적으로 싫었기 때문에 실제로는 배열, 연상 배열을 사용해 기술하고 있습니다
즉 이렇게 ↓
.zshrc
# fzf
export FZF_COMPLETION_TRIGGER=','
typeset -Tgx FZF_DEFAULT_OPTS fzf_default_opts " "
fzf_default_opts=(
'--height=90%'
'--reverse'
'--border'
'--inline-info'
'--prompt="➜ "'
'--margin=0,2'
'--tiebreak=index'
'--no-mouse'
'--filepath-word'
)
() {
local -A color_map=(
[fg]='-1'
[bg]='-1'
[hl]='33'
[fg+]='250'
[bg+]='235'
[hl+]='33'
[info]='37'
[prompt]='37'
[pointer]='230'
[marker]='230'
[spinner]='37'
)
for x in "${(k)color_map[@]}"; do
fzf_color_opts+=("${x}:${color_map[${x}]}")
done
fzf_default_opts+=( '--color="'"${(j.,.)fzf_color_opts}"'"' )
}
() {
local -a fzf_bind_opts=()
local -A bind_map=(
[?]='toggle-preview'
[ctrl-a]='toggle-all'
['ctrl-]']='replace-query'
[ctrl-w]='backward-kill-word'
[ctrl-x]='jump'
[ctrl-z]='ignore'
[up]='preview-page-up'
[down]='preview-page-down'
)
for x in "${(k)bind_map[@]}"; do
fzf_bind_opts+=("${x}:${bind_map[${x}]}")
done
fzf_default_opts+=( '--bind="'"${(j:,:)fzf_bind_opts}"'"' )
}
연상 배열의 기술이 version5.5 이상의 zsh가 아니면 읽을 수 없습니다
보통 평문이라도 k
외형은 이런 느낌
파일 이름 검색
기본 동작은 "현재 디렉토리 아래의 파일 디렉토리 검색"입니다.
이번에는 다음과 같이 사용자 정의하고 싶습니다.
fd
로 변경. 검색 대상은 파일에만 bat
명령 사용) 설명이 여기
.zshrc
export FZF_CTRL_T_COMMAND="fd --type f "
export FZF_CTRL_T_OPTS="
--select-1 --exit-0
--bind 'ctrl-l:execute(tmux splitw -h -- nvim {})'
--bind '>:reload($FZF_ALT_C_COMMAND -H -E .git )'
--bind '<:reload($FZF_ALT_C_COMMAND)'
--preview 'bat -r :100 --color=always --style=header,grid {}'"
이런 상태가 됩니다
전체 텍스트 검색
현재 디렉토리 아래의 파일을 전체 텍스트 검색. 선택한 파일을 명령줄에 붙여넣기
man에있는 설명을 참고로합니다.
쿼리를 변경할 때마다
rg
검색이 실행됩니다.만든 것
fzf-ripgrep-widget
#!/usr/bin/env zsh
main() {
LBUFFER="${LBUFFER}$(__fzf_ripgrep)"
local ret=$?
zle reset-prompt
return $ret
}
__fzf_ripgrep() {
emulate -L zsh
rg_cmd="rg --smart-case --line-number --color=always --trim"
selected=$(FZF_DEFAULT_COMMAND=":" \
fzf --bind="change:top+reload($rg_cmd {q} || true)" \
--bind="ctrl-l:execute(tmux splitw -h -- nvim +/{q} {1} +{2})" \
--ansi --phony \
--delimiter=":" \
--preview="bat -H {2} --color=always --style=header,grid {1}" \
--preview-window='down:60%:+{2}-10')
local ret=$?
[[ -n "$selected" ]] && echo ${${(@s/:/)selected}[1]}
return $ret
}
main
.zshrc
autoload -Uz fzf-ripgrep-widget
zle -N fzf-ripgrep-widget
bindkey '\ef' fzf-ripgrep-widget
움직임
검색 결과가 미리보기 내에서 추적하여 만족
단지 하이라이트가 조금 미묘한 것과, 검색 결과 window의 format이 유감
감상
몇 가지 문제가 남아 있지만 이것이 현재 MAX
Rust 관련 명령을 건드려 Rust 굉장합니다.
Reference
이 문제에 관하여(【fzf】터미널상에서 파일명 검색과 전문 검색을 Preview 첨부로 하고 싶다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sho-t/items/dca82d5e27b16da12318텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)