Итак, в конце концов я нашел решение, которое работает.
Это включает вызов отдельного скрипта из моего подпроцесса, работающего внутри --preview. Я использовал следующий скрипт для получения строки, которую fzf передает в --preview (в формате имени файла: linenumber: found_string), а затем использовал bat , чтобы отобразить окно предварительного просмотра с подсветкой синтаксиса.
Этот метод довольно хорош, но несколько ресурсоемок. Я надеюсь уменьшить нагрузку, добавив к игнорирующему шару и используя ripgrep, а не найду, поскольку это кажется более эффективным.
bashscript, который я называю string2arg.sh
#!/bin/bash
string2arg() {
export arg_filename=$(cut -d":" -f1 <<< $1);
export arg_linenum=$(cut -d":" -f2 <<< $1);
min_offset=25
let max_offset="min_offset*3"
min=0
if (($min_offset < $arg_linenum)); then
let min="arg_linenum-$min_offset"
fi
let max="arg_linenum+$max_offset"
bat --color=always --highlight-line $arg_linenum --style=header,grid,numbers --line-range $min:$max $arg_filename;
}
Затем он вызывается из моего псевдонима fzf для поиска следующим образом:
alias fsearch='rg . -n -g "!*.html" | fzf --preview="source $SC/string2arg.sh; string2arg {}"'
где $ SC - путь к моему bashscript string2arg.sh.
Если я ищу термин с намерением открыть найденный файл в строке, в которой он найден, я использую следующий псевдоним bash.
alias vfsearch='export vfile=$(fsearch);vim +$(cut -d":" -f2 <<< $vfile) $(cut -d":" -f1 <<< $vfile)'
Также я использую следующие значения по умолчанию для
fzf и считаю, что они работают для меня, хотя, поскольку я перешел на tmux, иногда мне лучше показывать окно предварительного просмотра, а не в стороне.
export FZF_DEFAULT_COMMAND="fd --type file --color=always"
export FZF_DEFAULT_OPTS="--reverse --inline-info --ansi"
export FZF_COMPLETION_TRIGGER=']]'
Я нахожу это чрезвычайно полезным и планирую перенести его в мои сеансы vim. Надеюсь, это поможет другим!
Снимок экрана, чтобы лучше проиллюстрировать сценарий использования.