前言
之前已经介绍过了ctrlp
这个工具为什么还需要fzf
这个工具。
因为这两者在使用方式上有一些区别。
fzf
是可以直接在mac
的终端上使用,并且还能够集成到vim
当中使用。
官网
https://github.com/junegunn/fzf
FZF的Vim插件:
https://github.com/junegunn/fzf.vim
安装
fzf 这个工具,本身是mac下就可以使用的一个功能,而vim是可以调用外部应用来使用的。 所以需要新安装 fzf,再安装 vim 插件端。
fzf 本机安装
必须先安装,vim才能调用该插件。
代码语言:javascript复制git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
source ~/.zshrc
验证一下效果:
直接在 iterm2 下输入:fzf,就可以打开
代码语言:javascript复制fzf
control-j 和 control-k 上移和下移
带预览
代码语言:javascript复制fzf --preview 'cat {}
使用这个工具完全可以代替find
这个工具。
结合vim中使用
插件安装
代码语言:javascript复制" fzf#install() 确保你安装了最新的 fzf
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
命令说明
有很多命令很好用,下面是全部命令列表,然后一个一个介结。
Command | List |
---|---|
:Files [PATH] | 搜索文件 |
:GFiles [OPTS] | 搜索 Git files (git ls-files) |
:GFiles? | 查看Git文件状态 (git status) |
:Buffers | 查看打开的buffer |
:Colors | 选择样式,这个超好用 |
:Ag [PATTERN] | ag search result (ALT-A to select all, ALT-D to deselect all) |
:Rg [PATTERN] | rg search result (ALT-A to select all, ALT-D to deselect all) |
:Lines [QUERY] | Lines in loaded buffers |
:BLines [QUERY] | Lines in the current buffer |
:Tags [QUERY] | Tags in the project (ctags -R) |
:BTags [QUERY] | Tags in the current buffer |
:Marks | Marks,查看vim的mark,这个有点好用 |
:Windows | Windows |
:Locate PATTERN | locate command output |
:History | 查看文件打开历史 |
:History: | 查看命令历史,和上面那个不一样 |
:History/ | 搜索命令历史 |
:Snippets | Snippets (UltiSnips) |
:Commits | Git commits (requires fugitive.vim) |
:BCommits | Git commits for the current buffer; visual-select lines to track changes in the range |
:Commands | Commands |
:Maps | Normal mode mappings |
:Helptags | Help tags 1 |
:Filetypes | File types |
查询文件 :Files
查询文件,这个就是最普通的文件搜索。
查询git文件 :GFiles
查询被git跟踪的文件,这个我不常用,因为有更别的更好用的工具如lzaygit
。
查询命令列表 :Commands
查看所有vim
已安装的插件的命令,这个很强!!
查看最近打开历史 :History
查看执行过的历史命令,自行偿试。
代码语言:javascript复制:History
:History:
::History/
查看Marks标记
把通过m
标记过的位置罗列出来,比如平时用的最多的ma
,因为多了也记不住,这个就解决了标记多了记不住的问题
查询错误提示
代码语言:javascript复制space a
展示后,可以模糊搜索,也可以直接回车跳到想去的位置,这些都是markdown
的表格当中包含了一些检查认为有问题的地方。
检查根据打开的文件类型进行检查,如果打开的是.java
或.go
的文件,也会进行对应的语法检查。
样式选择 :Colors
这个有点意思,可以选择需要的样式,当然这些校式是我之前就安装过的,但是可以这样直接选择,方便不少。
查看普通模式下按键映射 :Maps
F5-12是我设置的go
的快键键,包括运行和debug的键键。
到这里,我们的vim-IDE
进化在文本操作这块基本已经差不多了,接下来就是关于编程方面的配置。
fzf
还是非常强大的,不论是使用,还是可视化的窗口,用起来还是比较爽。
完整配置
到了一这步的完整配置如下,后续基于这个配置,继续往下进行配置。
代码语言:javascript复制"=================================
" VIM 自身配置
"=================================
" 编码设置
set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
set enc=utf8
set fencs=utf8,gbk,gb2312,gb18030
" 启用插件
set nocompatible
filetype on
filetype plugin indent on
" Tab 转空格
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
" 列高亮
set cursorcolumn
" 记录上次光标位置
au BufReadPost * if line("'"") > 1 && line("'"") <= line("$") | exe "normal! g'"" | endif
" 分屏设置
" 向右分屏并把光标移动向右边
map td :set splitright<CR>:vsplit<CR>
" 向右分屏并把光标移动向左边
map ta :set nosplitright<CR>:vsplit<CR>
" 向下分屏并把光标移动向上边
map ts :set nosplitbelow<CR>:split<CR>
" 向下分屏并把光标移动向下边
map tw :set splitbelow<CR>:split<CR>
" 替换方向键为调节分屏大小
map <M-up> :res -5<CR>
map <M-down> :res 5<CR>
map <M-left> :vertical resize-5<CR>
map <M-right> :vertical resize 5<CR>
" 按键映射
map W :w<CR>
map Q :wq<CR>
map tq :q!<CR>
map te :terminal<CR>
" 设置 buff、空白字符的视觉提示
set list listchars=extends:❯,precedes:❮,tab:▸
" 这个提示在复制的时候是个问题
" set list listchars=extends:❯,precedes:❮,tab:▸,trail:˽
" 其他的一些配置
syntax on " 语法高亮
set number " 显示行号
"set relativenumber " 相对行号
set wildmenu " 让vim命令可用Tab补全
set hlsearch " 变输入搜索词边高亮
set incsearch " 光标自动跳转到搜索结果上
set t_ut= "防止vim背景颜色错误
" 复制系统到 vim
vnoremap <C-y> " y
nnoremap <C-p> "*p
"=================================
" 插件部分--开始
"=================================
" 插件
call plug#begin('~/.vim/plugged')
" NERDTree
Plug 'scrooloose/nerdtree'
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'mhinz/vim-startify'
call plug#end()
"=================================
" 插件部分--结束
"=================================
"=================================
" NERDTree
"=================================
" 打开关闭 NERDTree
map tt :NERDTreeToggle<CR>
" 打开vim时自动打开NERDTree
autocmd vimenter * NERDTree
" r 定位当前文件所在目录,这个很有用
" 当前从左树进入,又要将当前目录定位到当前位置用这个
map <leader>r :NERDTreeFind<cr> <C-w><C-w>
"显示书签"
let NERDTreeShowBookmarks=1
" 是否显示隐藏文件
let NERDTreeShowHidden=1
" 忽略一下文件的显示
let NERDTreeIgnore=['.pyc','~$','.swp']
let g:NERDTreeGitStatusIndicatorMapCustom = {
"Modified" : "✹",
"Staged" : "✚",
"Untracked" : "✭",
"Renamed" : "➜",
"Unmerged" : "═",
"Deleted" : "✖",
"Dirty" : "✗",
"Clean" : "✔︎",
'Ignored' : '☒',
"Unknown" : "?"
}
" }}}
"=========================================
" Startify 设置
"=========================================
" 修改其中的内容去获得更好的体验。
"设置书签
let g:startify_bookmarks= [
'~/workspaces/',
'~/.config/nvim/init.vim',
]
"起始页显示的列表长度
let g:startify_files_number = 10
"自动加载session
let g:startify_session_autoload = 1
"过滤列表,支持正则表达式
let g:startify_skiplist = [
'^/tmp',
]
"自定义Header和Footer
let g:startify_custom_header = [
' ------------------------------ ',
'| |',
'| Still waters run deep! |',
'| |',
' ---------------- ------------- ',
]
let g:startify_custom_footer = [
' ------------------------------ ',
'| Keep an open mind! |',
' ---------------- ------------- ',
]
" 自己完成的脚本,判断打开文件是否存在。
function! SomeCheck()
if filereadable(expand("%"))
echo "SpecificFile exists"
else
autocmd VimEnter * Startify
endif
endfunction
call SomeCheck()
参考资料
https://github.com/junegunn/fzf https://github.com/junegunn/fzf/wiki/Examples https://github.com/junegunn/fzf.vim