![87d0a909f90fb95d49a06c2921f0ec75.png](https://i-blog.csdnimg.cn/blog_migrate/50ecd2c3bd907a0b418d17b27db164c8.png)
hi, 这次要介绍一下 vim 的多文件操作。笔者刚学习 vim 的时候操作多个文件比较死板,都是一个个文件夹进去之后在打开对应的 文件,这种操作方式非常低效。这次介绍一下笔者自己摸索的操作多个文件的一些技巧,当然未必是最佳实践,如果你有更好的建议 可以留言评论。视频里会演示一下笔者如何操作多个文件的,整个过程我们都不要碰一下鼠标。发现知乎视频没有b站清晰度高,可以去b站关注同名用户查看。
目录树插件
对于浏览项目来说,目录树可能更加直观一些。vim 里你可以使用 nerdtree/defx 之类的文件目录树插件,在目录树窗口中你依然可以 使用 vim normal 模式下的快捷键,只用键盘完成文件操作。
快速搜索文件
快速搜索文件和打开的 buffer 也是一个常用操作,很多时候可能比目录树还要常用,这里笔者推荐的是 ctrlp/fzf.vim/denite 之类的 搜索工具,你可以快速根据文件名进行模糊搜索,同时如果打开了多个 buffer 也可以根据文件名快速搜索。
窗口快速跳转
当你打开了多个窗口的时候,vim 里可以使用 ctrl+w+hjkl 在窗口之间移动。不过这个操作依然比较麻烦,这里介绍我用的映射直接用 ctrl+hjkl 来进行窗口跳转,使用了 hjkl 保持和 vim normal 模式下的方向保持一致,用起来更符合习惯。
" use ctrl+h/j/k/l switch window
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l
" 切换 buffer
nnoremap <silent> [b :bprevious<CR>
nnoremap <silent> [n :bnext<CR>
窗口快速选择
如果你比较土豪屏幕很大,打开很多窗口,这里推荐一个快速选择窗口的插件 vim-choosewin。 它可以帮助你快速选择所有窗口中的任意一个,默认 normal 模式下使用减号(-)触发。
快速新建和退出 buffer
如果你像笔者一样平常喜欢打开多个文件,比如看代码的时候会比较方便,可能会频繁创建和退出 buffer(打开的一个文件就是一个buffer)。 如果可以快速创建和打开窗口会非常方便,笔者这里映射的快捷键你可以参考一下,我会在视频里进行演示。
" window control prefix
nnoremap [Window] <Nop>
nmap s [Window]
" 使用 sv, sg 快速在 normal 模式下分割窗口
nnoremap <silent> [Window]v :<C-u>split<CR>
nnoremap <silent> [Window]g :<C-u>vsplit<CR>
" leader 键
let g:mapleader=","
" 插入模式下使用 leader+w 快速保存文件
imap ,w <esc>:w<CR>
" 使用 jj 快速回到 normal 模式
inoremap jj <Esc>`^
" 在插入模式下任意位置直接切到新的一行
inoremap <C-j> <C-o>o
inoremap <C-l> <C-o>A
" 使用 leader+e 快速退出窗口(但是不会关闭 buffer)
noremap <leader>e :q<cr>
" 使用 leader+b 快速关闭当前 buffer
noremap <leader>b :bd<cr>
另外笔者还用了一个插件 BufOnly,当你想快速关闭除了当前 buffer 之外的其他 buffer,会非常方便,安装之后直接执行 :BufOnly
就可以了。
总结
在操作多个文件的时候如果可以掌握上述技巧,就会大幅提升编辑多个文件的效率。如果你有更好的技巧和建议,也可以留言评论。
往期推荐:
为什么知乎上这么多人推荐 HHKB,却不反复强调说该键盘不适合大多数程序员?www.zhihu.com![eb68a3f8a8a77aaa812ed0bf2a044358.png](https://i-blog.csdnimg.cn/blog_migrate/afb4c3a330385a6694e030f88c8ec0fd.jpeg)
![62e63bf4cfa696f04aacbe5ef866873b.png](https://i-blog.csdnimg.cn/blog_migrate/7995db119d0e64ee2a92586726ed45fb.jpeg)
![440920f4351e0582fff1e7f3166998de.png](https://i-blog.csdnimg.cn/blog_migrate/cc0e4244d15e2acf4a7c0a8d2efdd7dd.jpeg)