1 Vim最基础
Vim的最常用的四种模式(四种模式的提示在Vim左下角提示【-- INSERT--】、【:】、【】、【-- VISUAL --】):
- 正常模式:按ESC键回到
正常模式
,正常模式不能够编辑文本,在该模式下有很多快捷操作使用,如跳转到指定行,切换文档等 - 插入模式:即可以插入文本,编辑文档,只能由
正常模式
进入插入模式
,下面是一些常用
进入插入模式的按键操作
i:在当前光标处进入插入模式
a:按下此键向后退一个字符进入插入模式
o:按下此键进入当前行的下一行进入插入模式
- 命令模式:在
正常模式下
输入英文状态下的冒号(:
),即进入命令模式,即在此模式可以输入一些命令,并执行,比如保存编辑的文档,退出当前文档编辑,搜索和替换等 - 可视模式 :在
正常模式
下,按v
就进入了可视模式,可视模式能够干嘛,下面会有具体说明的
Vim的配置文件.vimrc(在当前的用户目录下~/.vimrc
):
" 设置文档编码为utf-8(让中文不乱码)
set encoding=utf-8
" 开启语法高亮
syntax on
" 显示行号
set number
" 突出显示当前行
set cursorline
" 打开状态栏标尺
set ruler
" 设置tab键为4个空格(方便不同的编辑器切换的时候不会乱掉格式)
set tabstop=4
set expandtab
set autoindent
2 简单的直接对文档操作
- 初始打开文件就进入了
正常模式
- 只能由
正常模式
进入插入模式
- 只能由
正常模式
进入命令模式
#以下是在终端中创建并打开test.txt文件
vim test.txt
# 从这里开始已经进入了Vim编辑器,开始进入插入模式
i
# 输入文本
hell vim
# 进入正常模式
ESC
# 进入命令模式
:
# 输入保存并退出的命令,之后又进入了Linux终端
wq
好的,从用vim创建了一个test.txt文档,并编辑了,然后保存退出了。接下来是要进一步操作该文档了,包括怎么在文档中删除,怎么复制,怎么黏贴,怎么向前向后撤销操作,相当于在Windows中掌握的Ctrl+x , Ctrl+c , Ctrl+v , Ctrl+z , Ctrl+y:
# 在正常模式下删除一行
dd
# 在正常模式下复制一行
yy
# 在正常模式下向前回撤(undo)操作
u
# 在正常模式下向后回撤(redo)操作
Ctrl + r
# 在正常模式下黏贴删除的内容(dd)或者复制(yy)的内容
p
3 开始高级一点操作文档
3.1 剪切 复制 黏贴 撤销
我们应当知道用Vim的时候就尽量要脱离鼠标了,鼠标有滚轮,可以翻上翻下,还能够选中文字,进而实现复制或者删除之类的操作,而在Vim中可以用快捷操作和四个方向键(← ↑ ↓ → 或者正常模式下的hjkl四个字母)来实现同样的功能,当然最简单的就是用这四个方向键上下所有移动了,不过文档很长的话,你估计要按一会儿了:
# 正常模式下直接跳转到文档末尾
gg
# 正常模式下直接跳转到文档头
shift + g
# 正常模式下跳转到指定行
linenum + gg
# 正常模式下跳转到行首
0 或者shift+6
# 正常模式下跳转到行末
shift + 4
3.2 文本多行操作和单个字符操作
在第2节中说到的复制黏贴都是一行行来的,怎么按一个个字符来呢?或者按多行来呢?
图1 在可视模式下选中的文本字符
# 在`正常模式`下进入`可视模式`(别告诉我你不记得怎么进入了),通过方向键选中要操作的字符或者行
← ↑ ↓ →
# 选中待操作的行或者字符后,按 y 键实现复制选中,当然你也可以用 d 实现剪切操作
y
# 复制完后自动进入正常模式,此时可以使用黏贴操作 p 了或者撤销操作 u 之类的快捷键了
p
图2 在可视模式操作后,进入正常模式下黏贴操作的结果
有了多行选中操作功能,那么还可以做什么呢?在编写程序的时候我们还可以用来多行缩进或者多行tab,首先这里先介绍一个单行缩进的办法:
# 光标停留在待缩进的行
# 正常模式下,向左缩进,即<<:
shift+,,
# 正常模式下,向右缩进,即>>:
shift+..
多行缩进操作:
# 用上述中的多行选中方式,选中你待缩进的程序代码
# 然后< 表示向左缩进,而> 表示向右缩进,即
shift+,
shift+.
# 当然还可以不用上述方式选中即可多行缩进: 要缩进的行数+<<(正常模式下)
# 从当前行开始,向左缩进6行(只缩进一个tab)
6<<
如何自动缩进呢?而不只是一个tab制表符
# 在正常状态下,行数 + ==,自动对齐代码
# 从当前行开始,自动对齐7行代码
7==
3.3 在文档中搜索和替换
在Windows系统中,还有一个常用的操作就是Ctrl+f
或者是Ctrl+h
,那么在Vim中如何实现呢?
在Vim的查找
是简单的,反斜杠加上你要查找的字符串:
# 在正常模式
/find_str
# 查找到了要的多个find_str,可以键入n来切换到下一个find_str
n
# 查找到了要的多个find_str,可以键入n来切换到上一个find_str
shift+n
但是查找并替换就有点小规则了,查找替换
的命令的格式(命令模式下操作)是如下的,已经查找好了,直接按ESC
键可以退出查找:
:[range]s/from/to/[flags]
[range]=
% ,全文查找
1,10 ,从第1行到第10行中查找
3,只在第三行中查找
[from]
待查找字符或字符串
[to]
待替换的字符
[flags]=
c confirm,每次替换前询问;
e error, 不显示错误;
g globle,不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串;
i ignore,忽略大小写
下面是一些常用的查找替换操作:
# 全文查找并替换(有提示 (y/n/a/q/l/^E/^Y)? )
:%s/find_str/replace_str/c
# 当前行查找,查完就退出查找(有提示 (y/n/a/q/l/^E/^Y)? )
:s/find_str/replace_str/gc
4 多标签操作(多文档操作)
上面的三节够我们在一个文档里面进行操作了,那么如果想同时在一个界面里操作多个文档呢?就向浏览器一样可以有很多个页面,鼠标想点哪个页面就点哪个页面,然后进行浏览和操作呢?
图3 多个文档操作的界面(文档标签处的+表示未保存)
# 在终端中打开多个文档
vim -p test1.txt test2.txt test3.txt
# 或者用Vim打开了一个文档test1.txt后,接着想在Vim内直接打开当前目录下的另一个文件test2.txt(命令模式下)
:tabnew ./test2.txt
# 想在多个文档之间切换,循环切换查看---方式一,正常模式下
gt
# 想在多个文档之间切换,查看上一个文档---方式二,命令模式下
:tabp
# 想在多个文档之间切换,查看下一个文档---方式三,命令模式下
:tabn
# 想关闭除当前文档之外的其他文档
:tabo
# 如果打开的文档有好几十个,可以在命令模式下,用该命令来选择选中哪个文档来查看
:tabs
5 其他的一些有意思的操作
5.1 Vim后台挂起
# Vim挂起:当不想要关闭当前文档,但是想进入[终端]输入一些命令的时候,可以在[命令模式]下:
:shell
# 进入终端了,然后操作完你的命令了,想回到之前编辑的文档界面(注意你当前在终端里):
exit
5.2 Vim锁定
以前在Window系统的时候,喜欢编辑完后按Ctrl+s
来保存文档,这是个很好的习惯,但是在Vim中却不是了,因为这个操作在正常模式下会让你的Vim锁住,光标啥的都移动不了了,那么怎么来解锁呢?
# 正常模式下锁住Vim
ctrl+s
# 解锁Vim
ctrl+q
5.3 字符串自动补全(你当且认为是代码补全)
Vim是很强大的,利用插件可以实现很高大上的功能,但是上面的所说都是基于默认的Vim,没有任何插件的,这小节所说的字符串自动补全也是一样,这个在做Linux下程序开发的时候,和实用的,类似Notepad++这个软件中的字符串补全功能:
图4 字符串自动补全功能视图
# 在插入模式下,插入模式下哦
Ctrl+n
5.4 编辑二进制文件
对于一些二进制文件, 比如网络传输中我们要对接收到的数据进行字节分析,又比如分析码流文件如h264文件等,都需要查看二进制内容,vim也提供二进制文件的查看和编辑功能:
# 打开一个h264二进制文件,加-b选项
vim -b test.h264
# 打开是乱码,需要切换到十六进制模式显示
# 切换到16进制显示状态后,可以修改16进制值,但是右边的乱码是修改无效的
:%!xxd -g 1
# 修改后需要切换回二进制模式,即乱码的状态,才能保存修改的内容
:%!xxd -r
# 保存
:w
—————————————————————————-
上面的操作是可以让一个程序员足够快的开发项目的,后面Vim的技能,慢慢在求知路上积累了。