作者称谓:Jack xu
个人介绍:不断学习的数字后端工程师
半导体知识分享第63期
技能升级,从这里开始
1什么是vim
1.1vim编辑器
所有的 Unix Like 系统都会内建 vim 文书编辑器,其他的文书编辑器则不一定会存在。
但是目前我们使用比较多的是 vim 编辑器。vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
1.2配置文件在哪?
Windows系统的配置文件是vim安装目录下的vimrc文件。Linux系统,RHEL和CentOS的配置文件是/etc/vimrc,Debian和Ubuntu的配置文件是/usr/share/vim/vimrc。Mac OS X的配置文件是/usr/share/vim/vimrc。
1.3vimRC中的RC是什么意思?
一般在运行某个软件、环境或工具之初,要初始执行的一些命令,称为Run Commands,即RC。根据Wikipedia.org的记载,RC缩写的用法源自MIT的相容分时操作系统(Compatible Time-Sharing System,CTSS)。
1.4 vim中最最常用的配置
在命令模式下编辑:
(1)颜色设置
syntax on "开启代码高亮
syntax off "关闭代码高亮
syntax enable "开启代码高亮
(2)搜索设置
set hlsearch "开启搜索高亮
set nohlsearch "关闭搜索高亮
set incsearch "输入搜索字符串的同时进行搜索
set ignorecase "搜索时忽略大小写
(3)用户界面
set showmode "开启模式显示
set ruler "开启光标位置提示
set number "显示行号
set nonu "不显示行号
set cursorline "强调光标所在行
set cmdheight=1 "命令部分高度为1
(4)编辑辅助配置
set autoindent "自动缩进
set noautoindent "不自动缩进
set smartindent "智能缩进
set autoread "当文件在外部被改变时,vim自动更新载入
set showmatch "显示匹配的括号
1.5vim命令键盘示意图
Vim是从 vim 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vim 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
2vim常用的四种编辑模式
2.1vim常用模式.
命令模式(command-mode)
插入模式(insert-mode)
可视模式(vimsual-mode)
正常模式(normal-mode)
2. 2如何进入这些模式
2.2.1正常模式
正常模式主要用来浏览和修改文本内容的,一般,打开vim都是正常模式。在任何模式下,只要按下Esc 键就可以返回正常模式。
2.2.2插入模式
插入模式则用来向文本中添加内容的,不同的操作还会有不同的插入选项。
i 在光标所在字符前开始输入文字并进入插入模式。
a 在光标所在字符后开始输入文字并进入插入模式。
o (字母o)在光标所在行的下面单独开一新行来输入文字并进入插入模式。
s 删除光标所在的字符并进入插入模式。
I 在行首开始输入文字并进入插入模式。此行首指第一个非空白字符处。如果行首有空格,则在空格之后输入文字并进入插入模式。
A 在行尾开始输入文字并进入插入模式。这个好用,您不必管光标在此行的什麽地方,只要按A 就会在行尾等着您输入文字。
O (大写字母O) 在光标所在行的上面单独开一新行来输入文字并进入插入模式。
S 删除光标所在行并进入插入模式
2.3 可视模式
可视模式相当于高亮选取文本后的普通模式。后边可以单独对这些选中的部分进行操作。
可视模式具有子模式:
2.3.1以行为单位进行选取的可视行模式
使用“V”键进入(也就是Shift+v);
示例:
鼠标左键选中下面的部分:
2.4 命令模式
多用于操作文本文件,例如查找、替换、保存文件;或者用来改变编辑器本身的状态,例如设定多窗口、多标签、分屏显示或者退出编辑器……
2.5模式的转换
2.5.1其它模式==>正常模式
按Esc键
2.5.2正常模式==>插入模式
按i 在光标前插入
按I 在行首插入
按a 在光标后插入
按s 删除光标所在的字符再插入
按A 在行末插入
按o 在当前行之下新建行
按O 在当前行之上新建行
按S 删除光标所在行再插入
2.5.3正常模式==>命令模式
按:(shift加;)
2.5.4正常模式==>可视模式
按Shift+v可视行模式
按Ctrl+v可视块模式
输入gv重新选中上一次选中的部分。
3vim的保存和退出操作
:w 保存文件但不退出vim 。保存编辑后的文件内容,但不退出vim编辑器。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中。
:w! 强制保存,不推出vim 。强制写文件,即强制覆盖原有文件。如果原有文件的访问权限不允许写入文件,例如,原有的文件为只读文件,则可使用这个命令强制写入。但是,这种命令用法仅当用户是文件的属主时才适用,而超级用户则不受此限制。
:w file 将修改另外保存到file中,不退出vim。把编辑处理后的结果写到指定的文件中保存。
:w! filename把编辑处理后的结果强制保存到指定的文件中,如果文件已经存在,则覆盖现有的文件。
:wq! filename把编辑处理后的结果强制保存到指定的文件中,如果文件已经存在,则覆盖现有文件,并退出vim编辑器。
:wq 保存文件并退出vim 。保存文件内容后退出vim编辑器。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中,然后退出vim编辑器。另外一种替代的方法是用ZZ命令。
ZZ使用ZZ命令时,如果文件已经做过编辑处理,则把内存缓冲区中的数据写到启动vim时指定的文件中,然后退出vim编辑器。否则只是退出vim而已。注意,ZZ命令前面无需加冒号“:”,也无需按Enter键。
:wq! 强制保存文件,并退出vim 。强制保存文件内容后退出vim编辑器。这个命令的作用是把内存缓冲区中的数据强制写到启动vim时指定的文件中,然后退出vim编辑器。
:q 不保存文件,退出vim 。在未做任何编辑处理而准备退出vim时,可以使用此命令。如果已做过编辑处理,则vim不允许用户使用“:q”命令退出,同时还会输出下列警告信息:
No write since last change (:quit! overrides)。
:q! 不保存文件,强制退出vim 。强制退出vim编辑器,放弃编辑处理的结果。如果确实不需要保存修改后的文件内容,可输入“:q!”命令,强行退出vim编辑器。
:e! 放弃所有修改,从上次保存文件开始再编辑命令历史。4vim的光标移动和跳转
4.1移动、跳转光标
键盘上的h (左)、j (下)、k (上)、l (右)分别可以作为左、下、右、上的移动键。在vim中也可以用↑↓← →作为方向键来移动光标。
4.2快速跳转到文档首/尾
光标跳到全文首:gg
光标跳到全文末尾:Shift+g即G
4.3以行/列为单位进行跳转
4.3.1光标向下移动多行,比如90行:
90j ;或者90↓
4.3.2光标向上移动多行,比如90行:
90k ;或者 90↑
4.3.3光标向左移动多列,比如11列:
11h ;或者 11←
4.3.4光标向右移动多行,比如13列:
13l ;或者 13→
4.4快速跳转到行首/尾
4.4.1光标移动到行首:
^(移动到行首第一个非空白字符)
0或者Home键(移动到行首)
4.4.2光标移动到行尾:
$或者End键
4.5以单词为单位进行跳转
光标移动到所在单词词首,向前跳(也就是向左跳):b。
光标移动到所在单词词首,向后跳(也就是向右跳):w。
光标移动到所在单词词尾,向后跳(也就是向右跳):e。
4.6快速跳转到某一行
光标跳转到第n行:
:n 或者 nG。
举例:
比如第90行:
:90 或者 90G
4.7显示行数:
注:默认gvim不显示行号,要想显示行号可以用
:set number或者:set nu命令。
如果想关闭显示,可以用:set nonu命令。
4.8显示总行数和所在行所占百分比:
Ctrl+g。
5vim下的一些参数设置
set nocompatible "不使用vi默认键盘布局。
set ai/noai " 自动缩进,新行与前面的行保持—致的自动空格/不自动空格(缺省)。
set aw/noaw " 自动写,转入shell或使用:n编辑其他文件时,当前的缓冲区被写入/不写。
set flash/noflash " 在出错处闪烁但不呜叫(缺省)/使用呜叫而不闪烁。
set ic/noic " 在查询及模式匹配时忽赂大小写/不忽略大小写(缺省)
set nu/nonu (set number/nonumber) " 屏幕左边显示行号/不显示行号(缺省)。
set showmatch " 显示括号配对,当键入“]”“)”时,高亮度显示匹配的括号/缺省不高亮。
set showmode " 处于文本输入方式时加亮按钮条中的模式指示器/缺省不指示当前模式。
set showcmd " 在状态栏显示目前所执行的指令,未完成的指令片段亦会显示出来。
set warn/nowarn " 对文本进行了新的修改后,离开shell时系统给出显示(缺省)。
set ws/nows " 在搜索时如到达文件尾则绕回文件头继续搜索
set wrap/nowrap " 长行显示自动折行。
colorscheme evening " 设定背景为夜间模式。
filetype plugin on " 自动识别文件类型,自动匹配对应的, “文件类型Plugin.vim”文件,使用缩进定义文件。
set autoindent " 设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置。
set cindent " 以C/C++的模式缩进。
set noignorecase " 默认区分大小写 。
set ruler " 打开状态栏标尺。
set scrolloff=5 " 设定光标离窗口上下边界 5 行时窗口自动滚动。
set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4。
set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格,不足 4 个时删掉所有剩下的空格)。
set tabstop=4 " 设定 tab 长度为 4。
set nobackup "不要备份文件。
syntax enable
syntax on " 自动语法高亮。
set clipboard+=unnamed "与windows共享剪贴板。
"set history=1000 “记录历史的行数。
"set background=dark “背景使用黑色。
"set smartindent "智能对齐,不使用。
"set guioptions-=T “去除vim的GUI版本中的toolbar。
"set vb t_vb= “当vim进行编辑时,如果命令错误,会发出一个响声,该设置去掉响声。
"set nohls “默认情况下,寻找匹配是高亮度显示的,该设置关闭高亮显示。
set incsearch "查询时非常方便,如要查找book单词,当输入到/b时,会自动找到 "第一个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依次类推,"进行查找时,使用此设置会快速找到答案,当你找要匹配的单词时,别忘记回车。
6vim的区块、代码块和文件跳转
6.1区块的跳转
区块主要包含()、[]、 {}、 #if、 /**/之间的跳转。
这些符号都是成对出现的,要在相匹配的符号对之间跳转可以直接用%即可。
在(上按%就会跳转到对应的)上,非常适合查找括号是否配对。反之,从)上按%键可以跳回对应的(上。 其他不好同理。
对于#if, 按%后会跳转到#else,再按%则跳转到#endif,再按%则跳回#if以此循环。
6.2代码块的跳转
标灰色的多用于C语言中,其他的可以用于Verilog中。区块指的以括号括住的部位。
如: 想在#if #else #endif之间进行切换,可以用%。如果在#else处,想快速向前跳转到#if处,可以用[#。
6.3文件跳转
当光标位于以下内容时(aa.h为文本文件):
如果需要跳转到aa.h文件,,在有tag的情况下可以在normal模式下按g + f即可 ;如果想要在新窗口打开该文件,则可以用ctrl+w f ;如果想要在新的tab中打开该文件则可以用ctrl+w gf。
7vim的翻页、滚动、操作
7.1翻页操作
命令模式下:
Ctrl + f 或者PageUp键:向上翻页。
Ctrl + b 或者PageDown键:向下翻页 。
Ctrl+d(d相当于down):向下翻半页。
Ctrl+u(u相当于up):向上翻半页。
Ctrl+e:向下滚动一行。
Ctrl+y:向上滚动一行。
n%:滚动到文件n%的位置。
7.2滚屏操作
按键 操作描述
^F 屏幕向下滚动一屏;
^B 屏幕向上滚动一屏;
^E 屏幕向下滚动一行;
^Y 屏幕向上滚动一行;
^D 屏幕向下滚动半屏;
^U 屏幕向上滚动半屏;
z + Enter 滚动屏幕,使当前光标所在行处于屏幕第一行;
z + . 滚动屏幕,使当前光标所在行处于屏幕中间行;
z + - 滚动屏幕,使当前光标所在行处于屏幕最后一行;
zz:将当前行移动到屏幕中央。
Zt:将当前行移动到屏幕顶端。
Zb:将当前行移动到屏幕底端。
8vim的自动和手动排版操作
8.1自动排版
在命令行模式下:
1、使用“gg”将光标移动到文档开头。
2、使用“v”切换到可视模式。
3、再用“G”将光标移动到文档尾部(相当于全选)。
4、最后使用“=”,即可完成整个文档的自动排版。
8.2代码对齐
gg+=+G:先gg跳转到文件开始位置,再输入=,再输入G,vim将自动进行C和C++源码的对齐操作。
8.3其他技巧
9其他操作
9.1拷贝/粘贴 (注:p/P都可以,p是表示在当前位置之后,P表示在当前位置之前)
9.2Undo/Redo
9.3重复多次操作
下面是一个示例:
9.4分屏 :split 和 vsplit.
下面是主要的命令,你可以使用VIM的帮助 :help split。