Install fzf(模糊文件查找)

…衆ロ難τιáo~ 提交于 2020-01-26 23:49:23

shell下的fzf

安装ccat

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/

安装fzf

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

当然你需要确保你安装了git

配置zshrc

在你的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 \然后按下<Tab>键,就可以查找我需要编辑的文件,找到后按下回车就可以开始编辑文件

ps: 我额外安装了fd作为搜索工具

neovim下的fzf

安装fzf.vim

Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'

配置fzf

" find file
noremap \ :FZF<CR>
" find history
noremap <C-h> :MRU<CR>
" find lines containing keywords
noremap <C-l> :LinesWithPreview<CR>
" find buffer
noremap <C-b> :Buffers<CR>

autocmd! FileType fzf
autocmd  FileType fzf set laststatus=0 noruler
  \| autocmd BufLeave <buffer> set laststatus=2 ruler

command! -bang -nargs=* Buffers
  \ call fzf#vim#buffers(
  \   '',
  \   <bang>0 ? fzf#vim#with_preview('up:60%')
  \           : fzf#vim#with_preview('right:0%', '?'),
  \   <bang>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
VIM#FZF#buffer

ranger下的fzf

修改ranger的commands.py

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

在你的rc.conf中写入

map \ fzf_select


我的新博客

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!