引言
大数据开发工作中,周围的同事不是用 VIM 就是 Emacs,你要是用 UltraEdit 或 notepad++ 都不好意思跟人家打招呼...什么插件呀、语法高亮呀、拼写检查呀,能给它开的都给它开着,就是一个字:VIM 酷!你说这么牛X的一东西,怎么着学会也得小半年吧。告诉你,半年!?入门都远着呢!能学会移动光标就不错了,你还别说耗不起,就这还是左右移动!!!
VIM 介绍
vim/vi 是 Unix / Linux 上最常用的文本编辑器而且功能非常强大。
特点:只有命令,没有菜单
VIM 的三种模式
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),插入模式(Insert mode)和编辑模式(Last line mode)。
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符。
以下是常用的几个命令:
i 切换到输入模式,以输入字符
x 删除当前光标所在处的字符
: 切换到编辑模式,以在最底一行输入命令
若想要编辑文本:启动 Vim,进入了命令模式后,按下i(或a/o)键,切换到插入模式
命令模式只有一些最基本的命令,因此仍要编辑模式输入更多命令。
插入模式
在命令模式下按下 i (或a/o)就进入了插入模式
在插入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Iinsert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式
编辑模式
在命令模式下按下:(英文冒号:)就进入了编辑模式。
编辑模式可以输入单个或多个字符的命令(可用的命令非常多)
在编辑模式中,基本的命令有(已经省略了冒号):
q 退出程序
w 保存文件
按 ESC 键可随时退出编辑模式
VIM 常用命令
插入命令
命令 | 作用 |
---|---|
a | 在光标后附加文本 |
A(shift + a) | 在本行行末附加文本 行尾 |
i | 在光标前插入文本 |
I(shift+i) | 在本行开始插入文本 行首 |
o | 在光标下插入新行 |
O(shift+o) | 在光标上插入新行 |
定位命令
命令 | 作用 |
---|---|
:set nu | 设置行号 |
:set nonu | 取消行号 |
gg G | 到第一行 到最后一行 |
nG | 到第n行 |
:n | 到第n行 |
保存和退出命令
命令 | 作用 |
---|---|
:w | 保存修改 |
:w new_filename | 另存为指定文件 |
:w >> a.txt | 内容追加到a.txt文件中 文件需存在 |
:wq | 保存修改并退出 |
shift+zz(ZZ) | 快捷键,保存修改并退出 |
:q! | 不保存修改退出 |
:wq! | 保存修改并退出(文件所有者可忽略文件的只读属性) |
注意事项:
不保存并退出:
有修改,但是修改后的内容是不保存的
有突发情况,导致窗口退出。修改文件之后,直接删除同名的.swp文件
删除命令
命令 | 作用 |
---|---|
x | 删除光标所在处字符 nx 删除光标所在处后n个字符 |
dd | 删除光标所在行,ndd删除n行 |
:n1,n2d | 删除指定范围的行(eg :1,3d 删除了123这三行) |
dG | 删除光标所在行到末尾的内容 |
D | 删除从光标所在处到行尾 |
复制和剪切命令
命令 | 作用 |
---|---|
yy、Y | 复制当前行 |
nyy、nY | 复制当前行以下n行 |
dd | 剪切当前行 |
ndd | 剪切当前行以下n行 |
p、P | 粘贴在当前光标所在行下 或行上 |
替换和取消命令
命令 | 作用 |
---|---|
r | 取代光标所在处字符 |
R(shift + r) | 从光标所在处开始替换字符,按Esc结束 |
u | undo,取消上一步操作 |
ctrl+r | redo,返回到undo之前 |
搜索和替换命令
命令 | 作用 |
---|---|
/string | 向后搜索指定字符串 搜索时忽略大小写 :set ic |
?string | 向前搜索指定字符串 |
n | 搜索字符串的下一个出现位置,与搜索顺序相同 |
N(Shift + n) | 搜索字符串的上一个出现位置,与搜索顺序相反 |
:%s/old/new/g | 全文替换指定字符串 (% 指全文,s 指开始,g 指全局替换) |
:n1,n2s/old/new/g | 在一定范围内替换指定字符串 |
起始行,终止行 s/ 要替换的字符串/替换的新的字符串 /g c 询问确认
eg: :%s/ftp/yang/g 全局替换,把ftp替换为yang
eg: :41,44/yang/lee/c 从41行到44行,把yang替换为lee,询问是否替换
eg: :41,44/yang/lee/g 同上,不询问,直接替换
eg: :%s//root//ROOT/g 把/root替换为/ROOT
eg: :%s#/bin/bash#/bin/ksh/g 把/bin/bash全部替换为/bin/ksh
使用替换命令来添加删除注释
:% s/^/#/g 来在全部内容的行首添加 # 号注释
:1,10 s/^/#/g 在1~10 行首添加 # 号注释
vi里面怎么查命令??
:!which cp
vi里面怎么导入命令的结果?
:r !which cp
可视化模式
- v (可视字符模式)
- V(shift+v) (可视行模式,选择多行操作)
- ctrl+v (可视块模式或列模式,用于操作列)
- I 或者 O (进入插入模式)