文章目录
Vim 是一个基于文本界面的编辑工具,使用简单且功能强大。更重要的是,Vim 是所有 Linux 发行版本默认的文本编辑器。
很多人习惯将 Vim 称为 Vi,其实 Vim 是 Vi 的增强版(在 Vi 的基础上增加了正则表达式的查找、多窗口的编辑等功能),使用 Vim 进行程序开发会更加方便。
想深入了解 Vi 和 Vim 的区别,可以在 Vim 命令模式下输入 :help vi_diff,即可看到关于两者区别的摘要。
Vim及其安装
众多 Linux 发行版系统,通常都已经默认安装好了 vi 或 Vim 文本编辑器,Centos 也不例外,该系统就默认安装有 vi 文本编辑器,但建议大家使用 Vim。
如果在命令行模式下输入“vim”,输出结果为“Command not found”,则表示此系统中未安装 Vim。
CentOS 系统中,使用如下命令即可安装 Vim:
yum install vim
需要注意的是,此命令运行时,有时需要手动确认 [y/n],如图 1 所示:
当命令行中输入“Vim”显示如图 1 所示的画面时,视为 Vim 安装成功。
Vim三种工作模式
使用 Vim 编辑文件时,存在 3 种工作模式,分别是命令模式、输入模式和编辑模式,这 3 种工作模式可随意切换,如图 1 所示。
命令模式
命令模式下无法编辑文件,只允许删除,复制,粘贴,撤销,使用快捷键等操作,文件打开时默认进入此模式
输入模式
在输入模式下,Vim 可以对文件执行写操作,类似于在 Windows 系统的文档中输入内容。
使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令(各指令的具体功能如表 3 所示),当编辑文件完成后按 Esc 键即可返回命令模式。
编辑模式
编辑模式用于对文件中的指定内容执行保存、查找或替换等操作。
使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。
指令执行后 Vim 会自动返回命令模式。如想直接返回命令模式,按 Esc 即可
。
Vim基本操作
Vim 打开文件
使用 Vim 打开文件很简单,例如在命令行模式下打开一个自己编写的文件 /test/vi.test,
打开方法如下:
[root@itxdl ~]# vim /test/vi.test
用法1:
vim /tmp/myshell.sh
#表示打开tmp目录下的myshell.sh文件,不存在则创建一个,默认光标会定位到上次
所在位置和高亮上次高亮的内容。
用法2:
vim +10 /tmp/myshell.sh
#表示打开tmp目录下的myshell.sh文件并且将光标移动到第10行。
用法3:
vim +/hello /tmp/myshell.sh
#表示打开tmp目录下的myshell.sh文件并且高亮显示文件里所有的hello内容。
用法4:
vim /tmp/myshell.sh /home/my.sh /root/a.txt
#表示同时打开tmp目录下的myshell.sh、home目录下的my.sh和root目录下的a.txt文件。
刚打开文件时 Vim 处于命令模式,此时文件的下方会显示文件的一些信息,包括文件的总行数和字符数,以及当前光标所在的位置等。
命令模式操作
光标移动
程序员在编辑程序时,经常会为将光标移动到与一个 “(” 匹配的 “)” (对于 [] 和 {} 也是一样的)处而感到头疼。Vim 里面提供了一个非常方便地査找匹配括号的命令,这就是 “%”。
比如,在 /etc/init.d/sshd 脚本文件中(最好还是复制后练习,小心驶得万年船),想迅速地将光标定位到与第 49 行的 “{” 相对应的 “}” 处,则可以将光标先定位在 “{” 处,然后再使用 “%” 命令,使之定位在 “}” 处,如图 6 所示。
复制、删除、粘贴、撤销操作:
- 按下 “J” 键 将两行间的换行符去掉
- 按“x” 删除光标所在字符
- 按“u” 撤销恢复
- 按“ctrl+r” 取消撤销恢复
- 按“y” 复制
“yw” 复制一个单词
"yl" 复制一个字母
"yy" 复制一整行
"y5y" 复制5行
- 按“c” 剪切
“cw” 剪切一个单词
"cl" 剪切一个字母
"cc" 剪切一整行
"c5c" 剪切5行
注意:“用c做剪切时,会进入插入模式,如果要粘贴需要退出插入模式按(ESC)在按p”
- 按“d” 删除
“dw” 删除一个单词
“dl” 删除一个字母
"dd" 删除一整行
"d5d" 删除5行
- 按"p" 粘贴
可视化模式的基本操作
在vim中是不能用鼠标选择区域操作的,如果要操作某个区域,需要进入到可视化模式。
在命令模式下 “ctrl + v” 就可以进入到可视模式了,按"上|下|左|右"移动光标选择区域,按相应操
作键就可以对选择区域进行操作。
可视化模式下批量添加字符
*1.把光标停留在想要加入字符所在的列的第一行
*2.移动光标选择添加字符所在列
*3."I"进入插入模式
*4.写入要插入的字符
*5.按"ESC"退出插入模式,字符批量添加成功
编辑模式操作
Vim 查找文本
在查找过程中需要注意的是,要查找的字符串是严格区分大小写的,如查找 “shenchao” 和 “ShenChao” 会得到不同的结果。
如果想忽略大小写,则输入命令 ":set ic";调整回来输入":set noic"。
如果在字符串中出现特殊符号,则需要加上转义字符 “”。常见的特殊符号有 \、*、?、$ 等。如果出现这些字符,例如,要查找字符串 “10$”,则需要在命令模式中输入 “/10$”。
Vim 替换文本
Vim 保存退出文本
Vim 的保存和退出是在编辑模式中进行的,其常用命令如下表所示。
需要注意的是,“w!” 和 “wq!” 等类似的指令,通常用于对文件没有写权限的时候(显示 readonly,),但如果你是文件的所有者或者 root 用户,就可以强制执行。
Vim多窗口编辑模式
在一个窗口同时打开多个文件
vim file1, file2, file3
命令模式输入:
:files 可查看打开的文件列表
:n 编辑下一个文件
:N 编辑上个文件
:files 列出目前这个vim打开的所有文件
多窗口编辑
命令模式:
- sp filename
打开一个新窗口,如果有filename,表示在新窗口打开一个新文件,否则表示新建一个窗口显示同一个文件(同步显示),上下排列 - vsp filename
打开的vim窗口是垂直排列的;窗口之间的光标切换
ctr + w + j(下方向箭) : 光标切换到下一个窗口
ctr + w + k(上方向箭):光标切换到上一个窗口
:set mouse=a 使得鼠标在vim中生效,可以使用鼠标移动光标 拖拽vim窗口。
Vim批量注释和自定义注释快捷键
使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符"#"再退回命令模式,非常麻烦。
连续行的注释其实可以用替换命令来完成。换句话说,在指定范围行加"#"注释,可以使用 “:起始行,终止行 s/^/#/g”,例如:
:1,10s/^/#/g
表示在第 1~10 行行首加"#“注释。”^"意为行首;"g"表示执行替换时不询问确认。如果希望每行交互询问是否执行,则可将 “g” 改为 “c”。
取消连续行注释,则可以使用 “:起始行,终止行s/^#//g”,例如:
:1,10s/^#//g
意为将行首的"#"替换为空,即删除。
当然,使用语言不同,注释符号或想替换的内容不同,都可以采用此方法,灵活运用即可。
添加"//"注释要稍微麻烦一些,命令格式为 “:起始行,终止行 s/^g”。例如:
:1,5s/^/\/\//g
表示在第 1~5 行行首加"//"注释,因为 “/” 前面需要加转义字符 “”,所以写出来比较奇特。
以上方法可以解决连续行的注释问题,如果是非连续的多行就不灵了,这时我们可以定义快捷键简化操作。格式如下:
:map 快捷键 执行命令
如定义快捷键 “Ctrl+P” 为在行首添加 “#” 注释,可以执行 “:map^P l#< Esc>”。其中 “^P” 为定义快捷键 “Ctrl+P”。注意:必须同时按 “Ctrl+V+P” 快捷键生成 “^ P” 方可有效,或先按 “Ctrl+V” 再按 “Ctrl+P” 也可以,直接输入 “^P” 是无效的。
“l#< Esc>” 就是此快捷键要触发的动作,“l” 为在光标所在行行首插入,"#" 为要输入的字符,"< Esc>" 表示退回命令模式。"< Esc>" 要逐个字符输入,不可直接按键盘上的 Esc 键。
设置成功后,直接在任意需要注释的行上按 “Ctrl+P” 快捷键,就会自动在行首加上 “#” 注释。取消此快捷键定义,输入 “:unmap^P” 即可。
我们可以延伸一下,如果想取消文件行首的快捷键,则可以设置 “:map^B 0x”,快捷键为 “Ctrl+B”, “0” 表示跳到行首,“x” 表示删除光标所在处字符。
再如,有时我们写完脚本等文件,需要在末尾注释中加入自己的邮箱,则可以直接定义每次按快捷键 “Ctrl+E” 实现插入邮箱,定义方法为 “:map^E asamlee@itxdl.net< Esc>”。其中 “a” 表示在当前字符后插入,“samlee@itxdl.net” 为插入的邮箱,"< Esc>" 表示插入后返回命令模式。
所以,通过定义快捷键,我们可以把前面讲到的命令组合起来使用。
将快捷键对应的命令保存在 .vimrc 文件中,即可在每次使用 Vim 时自动调用,非常方便。
Vim显示行号
显示行号:
:set number 或者 :set nu
隐藏行号
:set nonumber 或者 :set nonu
这样的设置方法只能维持在,当前vim打开的文件中显示效果,那么我们怎么让我们每次打开vim的时候自动设置行号呢,这个时候就需要我们设置配置文件,两种配置方式
/etc/vimrc 是系统范围的初始化配置
~/.vimrc 个人的vim初始化配置
操作步骤:
1.这里设置的是个人配置,直接在终端输入 vim ~/.vimrc ,然后我们就可以进入配置文件
2.我们在配置文件输入set number 或者 set nu 就可以了
3. :wq ,保存并退出
配置文件(.vimrc)详解
Vim编辑器相关的所有功能开关都可以通过.vimrc文件进行设置。
.vimrc配置文件分系统配置和用户配置两种。
系统vimrc配置文件存放在Vim的安装目录,默认路径为/usr/share/vim/.vimrc。可以使用命令echo $VIM来确定Vim的安装目录。
用户vimrc文件,存放在用户主目录下~/.vimrc。可以使用命令echo $HOME确定用户主目录。
注意:用户配置文件优先于系统配置文件,Vim启动时会优先读取当前用户根目录下的.vimrc文件。所以与个人用户相关的个性化配置一般都放在~/.vimrc中。
基本配置
2.1 支持中文不乱码
'设置编码'
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
与Vim编码有关的变量包括:encoding、fileencoding、termencoding。
encoding选项用于缓存的文本、寄存器、Vim 脚本文件等;fileencoding选项是Vim写入文件时采用的编码类型;termencoding选项表示输出到终端时采用的编码类型。
2.2 显示行号
'显示行号'
set nu
set number
nu是number的缩写,所以上面两个配置命令是完全等效的。
2.3 突出显示当前行
set cursorline
2.4 启用鼠标
set mouse=a
set selection=exclusive
set selectmode=mouse,key
Vim编辑器里默认是不启用鼠标的,也就是说不管你鼠标点击哪个位置,光标都不会移动。通过以上设置就可以启动鼠标,不过对于高级玩家来说,用Vim就是为了解放双方不用鼠标,所以这个设置可以根据个人爱好选择。
2.5 显示括号匹配
set showmatch
2.6 设置缩进
'设置Tab长度为4空格'
set tabstop=4
'设置自动缩进长度为4空格'
set shiftwidth=4
'继承前一行的缩进方式,适用于多行注释'
set autoindent
2.7 设置粘贴模式
set paste
2.8 显示空格和tab键
在Vim中通过鼠标右键粘贴时会在行首多出许多缩进和空格,通过set paste可以在插入模式下粘贴内容时不会有任何格式变形、胡乱缩进等问题。
set listchars=tab:>-,trail:-
Vim编辑器中默认不显示文件中的tab和空格符,通过上面的配置可以获得以下的显示效果,方便定位输入错误。
2.9 显示状态栏和光标当前位置
'总是显示状态栏'
set laststatus=2
'显示光标当前位置'
set ruler
Vim配置变更立即生效
要让.vimrc变更内容生效,一般的做法是先保存 .vimrc 再重启vim,增加如下设置,可以实现保存 .vimrc 时自动重启加载
'让vimrc配置变更立即生效'
autocmd BufWritePost $MYVIMRC source $MYVIMRC