ccat和cat的功能一样,但是ccat能够高亮显示,但是cat不能,ccat安装方法如下:
wget https://github.com/jingweno/ccat/releases/download/v1.1.0/linux-amd64-1.1.0.tar.gz
tar -xvf linux-amd64-1.1.0.tar.gz
sudo cp ./linux-amd64-1.1.0/ccat /usr/bin/
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
当然你需要确保你安装了git
在你的zshrc中写入:
export FZF_DEFAULT_OPTS='--bind ctrl-j:down,ctrl-k:up --preview "[[ $(file --mime {}) =~ binary ]] && echo {} is a binary file || (ccat --color=always {} || highlight -O ansi -l {} || cat {}) 2> /dev/null | head -500"'
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git . ~/.config /home / '
export FZF_COMPLETION_TRIGGER='\'
export FZF_PREVIEW_COMMAND='[[ $(file --mime {}) =~ binary ]] && echo {} is a binary file || (ccat --color=always {} || highlight -O ansi -l {} || cat {}) 2> /dev/null | head -500'
如果你用的是bash或其他shell,应该也是可以的,你只要在相应的rc中写入这段命令就可以了
终端输入fzf就可以开始查找文件了,fzf会返回你的文件路径
而且fzf可以和其他命令很好的交互,比方说我用vim和fzf交互,只需要输入vim \
然后按下
ps: 我额外安装了fd作为搜索工具
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
" find file
noremap \ :FZF
" find history
noremap :MRU
" find lines containing keywords
noremap :LinesWithPreview
" find buffer
noremap :Buffers
autocmd! FileType fzf
autocmd FileType fzf set laststatus=0 noruler
\| autocmd BufLeave set laststatus=2 ruler
command! -bang -nargs=* Buffers
\ call fzf#vim#buffers(
\ '',
\ 0 ? fzf#vim#with_preview('up:60%')
\ : fzf#vim#with_preview('right:0%', '?'),
\ 0)
command! -bang -nargs=* LinesWithPreview
\ call fzf#vim#grep(
\ 'rg --with-filename --column --line-number --no-heading --color=always --smart-case . '.fnameescape(expand('%')), 1,
\ fzf#vim#with_preview({'options': '--delimiter : --nth 4.. --sort'}, 'up:50%', '?'),
\ 1)
command! -bang -nargs=* MRU call fzf#vim#history(fzf#vim#with_preview())
当我在vim中按下"\",vim会调用fzf查找你需要编辑的文件,选中文件后回车即可编辑
当我在vim中按下"Ctrl+h",vim会显示你最近打开的文件
当我在vim中按下"Ctrl+l",vim会高亮包含你搜索关键词的一行代码
当我在vim中按下"Ctrl+b",vim会显示当前你打开的buffer,输入数字或者符号即可跳转buffer
在commands.py
中定义fzf_select
类
class fzf_select(Command):
"""
:fzf_select
Find a file using fzf.
With a prefix argument select only directories.
See: https://github.com/junegunn/fzf
"""
def execute(self):
import subprocess
import os.path
if self.quantifier:
# match only directories
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \
-o -type d -print 2> /dev/null | sed 1d | cut -b3- | fzf +m"
else:
# match files and directories
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \
-o -print 2> /dev/null | sed 1d | cut -b3- | fzf +m"
fzf = self.fm.execute_command(command, universal_newlines=True, stdout=subprocess.PIPE)
stdout, stderr = fzf.communicate()
if fzf.returncode == 0:
fzf_file = os.path.abspath(stdout.rstrip('\n'))
if os.path.isdir(fzf_file):
self.fm.cd(fzf_file)
else:
self.fm.select_file(fzf_file)
在你的rc.conf中写入
map \ fzf_select
我的新博客