admin 管理员组文章数量: 887021
目录
前言
VIM模式
常用操作
文本编辑
多文件操作--Buffer
多窗口操作--TAB标签页
常用配置
常用插件
如何追踪代码
强大的终端工具--Tmux
结尾
参考文献
附录
常用配置
前言
工欲善其事,必先利其器。在Linux下开发,熟悉掌握VIM操作,可以很好地提高编辑与开发效率。初入门的同学,一般只懂得几个常用的VIM操作,打开文件,插入编辑,保存退出,只会这几个操作,那就真是小看了这款神通广大的编辑器了,如果用来敲代码,甚至编辑效率都不如用IDE来得便捷。
适合阅读人群:接触过VIM常用模式及其配置文件的同学,想要全面且系统掌握VIM以提高编辑开发效率。
本文不会细述基本概念以及操作过程,撇弃不常用的操作。
VIM模式
常用模式有三种:普通模式、插入模式和命令行模式。
以下几个常用命令可以进入插入模式。
命令 | 说明 |
---|---|
i | 在当前光标处进行编辑 |
I | 在行首插入 |
A | 在行末插入 |
a | 在光标后插入编辑 |
退出插入模式返回普通模式,可以采用Esc,也可以通过将Esc映射到jj,通过直接输入jj切换到普通模式,再也用不着畸形地伸出尾指操作了。
在.vimrc中配置:
inoremap jj <Esc>
常用操作
开启文件
命令 | 说明 |
---|---|
vim first_file second_file | 同时打开文件1与文件2 |
:e file | 在VIM内打开当前目录下的文件,会同时关闭当前文件 |
保存与退出文件
命令 | 说明 |
---|---|
:w | 保存文件 |
:wq | 保存并退出 |
:x | 保存并退出 |
:q | 退出 |
:q! | 强制退出,不保存 v |
:q[all] | 退出当前所有窗口 |
如果你想退出当前文档,但后续还要打开,你可以通过Ctrl+z把当前VIM程序挂在后台,在shell下通过jobs命令查看当前后台程序以及对应的序号,想打开时,通过fg+序号指令即可快速恢复。
分屏
将VIM分屏,我们可以同时阅读多个文档,通过<Ctrl+w>+w命令在不同的文档间切换,滚动阅读与编辑
分屏效果如下图所示:
【分屏效果图】
命令 | 说明 |
---|---|
:vs | 左右分屏 |
:sp | 上下分屏 |
<Ctrl+w>+w | 屏间切换 |
<Ctrl+w>+h/j/k/l | 切换到左边/下边/上边/右边窗口 |
文本编辑
移动
新手只会利用上下左右键进行光标移动,用Backspace或者Delete作字符删除,效率比IDE+鼠标还低。掌握以下移动大法,可以让你的移动速度快速提升。
命令 | 说明 |
---|---|
0 | 行首 |
$ | 行尾 |
ctrl+b(backward) | 上一页 |
ctrl+f(forward) | 下一页 |
ctrl+u(upward) | 往上翻半页 |
ctrl+d(downward) | 往下翻半页 |
ctrl+e | 往下滚一行 |
ctrl+y | 往上滚一行 |
gg | 文档开头 |
G | 文档末尾 |
e/w | 光标往后移动一个单词 |
b | 光标往前移动一个单词 |
gi | 返回上一编辑处并插入模式 |
如果能熟练使用h/j/k/l就更好了,用不着移动到小键盘的方向键了。不习惯就算了。翻页太多指令,可以只记住翻半页的两个指令。
编辑
针对单词,句子与段落的删除,编辑与复制,指令格式为:[number]<command>[text object]
数据表示操作的文本对象数据 ,2dw表示删除两个单词,而对于行来说,dd表示删除一行,d3d表示删除三行。
命令 | 说明 |
---|---|
dw | 删除一个单词 |
cw | 删除当前单词并进入插入模式 |
yw | 复制当前单词(包括后面的空格) |
P/p | 将内容粘贴到当前光标前面/后面 |
yiw | 复制当前单词(不包括后面的空格,i表示inner) |
ct"/ct" | 删除“”中的内容并进入插入模式 |
ci( | 删除()中的内容并进入插入模式 |
dd | 删除一行 |
d3d | 删除三行 |
x | 删除字符(我们再也不用跳到老远按Backspace啦) |
在shell终端,删除操作有以下指令:
命令 | 说明 |
---|---|
ctrl+w | 删除上一单词 |
ctrl+u | 删除当前一行 |
ctrl+h | 删除上一字符 |
撤消及重复
命令 | 说明 |
---|---|
. | 重复操作 |
u | 撤消操作 |
ctrl+r | 回做 |
替换
命令 | 说明 |
---|---|
:%s/oldstring/newstring/g(lobal) | 全局将oldstring替换为newstring |
r{char} | 直接替换一个字符,譬如fw就是将当前字符替换为w |
:%s/oldstring/newstring | 在当前行将oldstring替换为newstring |
搜索
命令 | 说明 |
---|---|
/string | 全文搜索string,N查找上一处,n查找下一处 |
ss | 采用easy-motion插件,并映射搜索指令为ss,推荐使用 |
缩进缩出
命令 | 说明 |
---|---|
n<< | 光标以下的n行会缩出 |
n>> | 光标以下的n行会缩进 |
寄存器--复制粘贴
这个操作保存你随时随地可以粘贴之前复制的内容,譬如一句打印,要知道,有时候我们复制了一句Log,粘着粘着就不见了,又得回头找,耗时费力。
命令 | 说明 |
---|---|
“ayy | 复制当前行并保存到寄存器a |
”ap | 粘贴寄存器a中的内容 |
:reg a b | 查看寄存器a,b中的内容 |
多文件操作--Buffer
当你打开一个文件时,就打开了一个buffer,当你通过":e filename",":open ."或者Nerdtree等方式打开另一个文件时,就打开了另一个buffer。你可以查看所有打开的buffer,切换到不同的buffer也就是文件,相当于在Source Insight的window菜单中查看已打开的文件与切换到其他文件。来吧,我们来看一下有哪些操作指令可以用。
命令 | 说明 |
---|---|
:e filename | 打开当前路径的文件 |
:open . | 打开当前路径的目录树以便打开目标文件,常用于打开其他目录的文件 |
:ls | 查看当前vim所有的buffer |
:b[n] | [n]为序号,打开序号为n的buffer |
:bp | 切换到前一个buffer |
:bn | 切换到后一个buffer |
ctrl+^ | 在最近两个BUFFER间切换,即ctrl+shift+^ |
当你使用屏的时候,也是在打开多个buffer。只不过你通过<Ctrl+w>+w等方式在不同的窗口间切换。而上述表格中的切换buffer指令则是在当前窗口直接打开新的文件。
如果你觉得这些指令太麻烦,可以参考BufExplorer插件,它可以提供更为方便的映射键来操作buffer,犹如在Source Insight中一般方便。
多窗口操作--TAB标签页
vim从vim7开始加入了多标签切换的功能,相当于多窗口。 如果你不喜欢buffer操作,可以尝试多窗口操作,类似于浏览器的多个标签页。
命令 | 说明 |
---|---|
:tabnew | 打开一个新的空标签页 |
gt (标准模式下) | 在tab之间切换 |
:tabc | 关闭当前的tab |
:tabs | 查看所有打开的tab |
:tabp | 前一个 |
:tabn | 后一个 |
如果标签页超过2个,用gt,gT来一个个切换标签页确实不方便, 用:tabnext {count}, 按键太多。你可以通过在vimrc配置中加入映射键配置,用 alt+n来切换,解决切换标签这个麻烦问题。
常用配置
假如你在使用一个裸VIM,那么最好记住一些非常常用的配置,譬如显示行号,搜索高亮,语法高亮等,更多的可以见附录-常用配置。
命令 | 说明 |
---|---|
set syntax=on | 语法高亮 |
set tabstop=4 | Tab键的宽度 |
set number | 显示行号 |
set hlsearch | 搜索高亮 |
set backgound=drak | 设置背景颜色 |
了解如何配置键盘命令,让一些反人类的键盘操作(譬如:wq保存退出文件)与插件的快捷键更符合你的使用习惯。
常用插件
把VIM打造成一个强大的IDE,依赖于各种功能的插件,这些插件都放在.vim文件夹中,配置在.vimrc中。你可以直接用现成的vim包,将你的.vim与.vimrc替换即可,通过阅读.vimrc中对各种插件快捷键的配置,来掌握各种插件的使用,譬如,F2往往用来打开Taglist,F10用来打开NERDtree,ss用来快速搜索,gcc用来注释,ctrl+p用来模糊搜索文件。你也可以自己打造属于自己的VIM,只配置你所需要的插件,配置你个人专属的快捷键。
首先,你要了解一个插件是怎么安装在VIM中的。其次,你可以安装一个用于安装其他插件的插件,由此可以方便的在线安装各种插件。然后,通过阅读插件的github说明或者google等方式,了解每一个功能插件最常用的操作指令与映射配置,实践熟悉。
根据经验与需求,我们可以总结出一些常用必要的插件。
插件 | 功能 | 常用指令说明 |
---|---|---|
vim-plug/Vundle | 安装管理其他插件 | 详情见github |
Nerdtree | 目录树 | :NERDTreeToggle切换目录树 |
ctrlp | 模糊搜索当前目录下的文件 | ctrl+p打开搜索窗口 |
taglist/tagbar | 查看源代码文件结构 | :Tlist/:TagbarToggle 打开代码结构窗口 |
vim-commentary | 快速注释 | gcc注释与去注释,gcgc去注释,先选多行再gc实现多行注释 |
YouCompleteMe | 代码补全 | 这个安装好像有点麻烦 |
vim-airline | 状态栏 | 可以显示行数,文件名等状态信息 |
identline | 代码缩进线条 | 对于C语言开发还是很有用的 |
vim-hybrid | 配色 | 配置好看的主题才能舒服的看代码与敲代码 |
还有其他插件可供选择,包括模糊搜索与替换的Ag.vim与fzf.vim,代码格式化的vim-autoformat,静态检查的ale,Git与Vim结合的vim-gitgutter。
如何追踪代码
追踪代码包括两个方面,一,查看对象与函数的定义,二,在特定目录搜索对象与函数。
对于第一点,在源码目录下通过执行shell指令ctags -R以生成tags文件,该这个tags文件就是你目录下所有源码内容的索引 ,包括所有语法元素。打开某个源码文件,将光标定位在要搜索定义的word下,执行快捷键Ctrl+]
并进行跳转,执行 快捷键Ctrl+T
跳转到前一次的tag处。相当于jump to definition/jump to declare。
对于第二点,可以在shell下执行grep搜索某个关键字出现的地方,相当于search in files。
强大的终端工具--Tmux
你有没有这样的烦恼。每次下班后关机,第二天开机登录服务器,又得重新进入工程,配置环境变量,打开你昨天编辑的源码,继续工作。又或者,一个shell终端下,打开很多个工程,每个工程一个shell标签,如果这个时候网络断线,完了,你得一个一个重新打开。又或者,突然电脑断电,或者终端被关闭,又得再来一遍。
你有没有遇到这样的麻烦,一个shell终端用于编辑浏览代码,另一个shell终端用于编译工程,又或者,在同一终端下,无法同时编译与编辑浏览。又或者,在同一终端下,无法同时编译多个工程,只能新开一个终端编译一个工程。
解决这些问题的利器就是Tmux。Tmux(terminal multiplexer)是Linux上的终端复用神器,可从一个屏幕上管理多个终端(准确说是伪终端)。使用该工具,用户可以连接或断开会话,而保持终端在后台运行。
如何理解与使用TMUX,见阮一峰的网络教程[2]。
在这里,我们记住几个最重要的命令,就可以满足日常所需。
命令 | 说明 |
---|---|
$tmux new -s <session-name> | 新建会话,名字为<session-name> |
$tmux ls | 查看当前所有的 Tmux 会话 |
tmux att -t <session-name> | 接入某个已存在的会话<session-name> |
Ctrl+b d | 分离当前会话 |
Ctrl+b x | 杀死当前会话 |
窗格操作快捷键 | |
Ctrl+b % | 划分左右两个窗格 |
Ctrl+b " | 划分上下两个窗格 |
Ctrl+b <arrow key> | 光标切换到其他窗格 |
Ctrl+b o | 光标切换到下一个窗格 |
Tmux麻烦的一点是,你在浏览终端的内容时,上下翻页无法通过鼠标直接滚动,需要先按Ctrl+b,然后通过Page Up与Page Down上下翻页。
不要嫌Tmux用起来麻烦,绝对是Linux开发必备利器。
结尾
掌握这些VIM技术,可以满足日常开发的需要,一个终端就可以进行工作,不再需要打开Source Insight导入新工程新文件,各种鼠标操作,特别是在使用其他人的电脑与访问远程服务器时,非常便捷,缺点也很明显,学习曲线太陡峭,快捷键多得难以记住,插件安装与配置都需要学习,入门时间长。用IDE也好,VIM也好,只要顺手方便,都可以用来浏览与编辑代码,各有优劣。
参考文献
[1]玩转Vim 从放弃到爱不释手 https://www.imooc/learn/1129
[2]Tmux 使用教程 http://www.ruanyifeng/blog/2019/10/tmux.html
附录
常用配置
功能 | 配置 |
---|---|
显示颜色 | set t_Co=256 |
允许插件 | filetype plugin on |
设置当文件被改动时自动载入 | set autoread |
共享剪贴板 | set clipboard=unnamed |
自动保存 | set autowrite |
打开状态栏标尺 | set ruler |
突出显示当前行 | set cursorline |
在处理未保存或只读文件的时候,弹出确认 | set confirm |
自动缩进 | set autoindent<br>set cindent |
Tab键的宽度 | set tabstop=4 |
统一缩进为4 | set softtabstop=4<br>set shiftwidth=4 |
历史记录数 | set history=1000 |
搜索忽略大小写 | set ignorecase |
搜索逐字符高亮 | set hlsearch<br>set incsearch |
命令行(在状态行下)的高度,默认为1,这里是2 | set cmdheight=2 |
使用鼠标 | set mouse=a<br>set selection=exclusive<br>set selectmode=mouse,key |
高亮显示匹配的括号 | set showmatch |
匹配括号高亮的时间(单位是十分之一秒) | set matchtime=1 |
为C程序提供自动缩进 | set smartindent |
光标移动到buffer的顶部和底部时保持3行距离 | set scrolloff=3 |
版权声明:本文标题:VIM进阶指导 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1724509770h753117.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论