1.前言
vi(vim)可以说是linux中用得最多的工具了,不管你配置服务也好,写脚本也好,总会用到它。但是,vim作为一个“纯字符”模式下的工具,它的操作和WINDOWS中的文本编辑工具相比多少有些复杂。
这里,我根据自己个人的使用经验,整理了一套vim的操作以及记忆的方法,希望对大家的学习有所帮助。
2.VIM的三种模式
命令模式:在Linux终端中输入“vim 文件名”就进入了命令模式,但不能输入文字。
编辑模式:在命令模式下按i就会进入编辑模式,此时就可以写入程式,按Esc可回到命令模式。
末行模式:在命令模式下按:进入末行模式,左下角会有一个冒号出现,此时可以敲入命令并执行。
下面是三种模式的简单分析图:
3. 常用命令和操作
3.1 方向与跳转
h j k l
左 下 上 右
Ctrl + f 翻到下一页(向前翻页) front
Ctrl + b 翻到上一页(向后翻页) back
Ctrl + u 向前翻半页
Ctrl + d 向后翻半页
gg 回到文件的开头 小个子(g)站队头
GG 回到文件的末尾 大个子(G)站队尾
HH 回到屏幕的顶端
MM 回到屏幕的中间 美美(MM)站队中间
LL 回到屏幕的底端
^ 移到行头 往上就到行头了(象形)
$ 移到行尾 写完一行就要给一行的钱
0 移到下行行首
w 下一个单词 word
b 前一个单词 behind(在。。。后面)
e 下一单词尾 end
123G 跳到123行 大哥(G)说到哪就到哪
i 光标前插入 insert
a 光标后加入 add
A 在行末加入 在一个词后是小a,一个行后就是大A
o 另起一行加入 一个小鸡蛋(小o)掉下来了摔开了花
O 上一行加入 吐一个大泡泡(大O)飞上去破了
3.2 删除
---------- c(吃掉)代表行内删除--------
cw 删除一个单词(一部分不包括空格) 吃掉一个 word
c$ 删除一行到行尾 刚写的一行被删了,钱也拿不到了
c^ 删除一行到行头 往上吃,一直吃到头
x 删除一个字符 看你不爽就打上“x”
---------- d 代表删除--------------
dd 删除一行 del dir
dw 删除单词到尾部(包括空格) del word
de 删除单词到尾部(不包括尾部空格) del end
d$ 删除当前到行尾的所有字符 del $(代表尾部)
d^ 删除当前到行首的所有字符 del ^(代表行首)
3.3 合并与撤销
J 合并当前行 一个大钩子(J)把下面的一行拉到自己行尾
u 撤销上次操作 undo
U 撤销当前行所有操作 事情闹大了,得有个更大的UNDO才能恢复
Ctrl + r 恢复undo 前 recover
3.4 复制
--------- y 代表复制到缓存中-----------
yy 复制当前行整行的内容到vi缓冲区 ,如果复制5行就是5yy
yw 复制当前光标到单词尾字符的内容到vi缓冲区
y$ 复制当前光标到行尾的内容到vi缓冲区
y^ 复制当前光标到行首的内容到vi缓冲区
p 读取vi缓冲区中的内容,并粘贴到光标当前的位置(不覆盖文件已有的内容)
3.5 搜索与替换
/word 从上而下查 /是从上而下写的吧
?word 从下而上查找 字符在哪儿呢(?)回头找找吧
n 定位下一个匹配的 相当于向下查找下一个 next
N 定位上一个匹配的 相当于向上查找上一个
*或# 找到与当前光标所在字符串匹配的下一个字符串
% 找到对用的括号
:s/1/2 搜索当前行第一个1并用2代替 search
:s/1/2/g 搜索当前行所有的1并用2代替 global
:#,#s/1/2/g 在#,#间搜索所有1并用2替换
:%s/1/2/g 在整个文档中将1替换为2 100%(全部)
:s/1/2/c 每次替换都给出提示确认 cue提示
:grep 直接调用系统的grep命令,搜索完毕后可以通过:copen查看列表,点击后可以进入文件
通过输入:cw可以再次显示搜索结果
3.6 多文件操作
vim 1.txt 2.txt 3.txt 同时打开多个文档
:files 显示当前打开哪些文件
:args 显示多文件信息(会在末行提示当前打开了哪些档) are globals
:next或:n 切换到下一个文件
:prev或:N 切换到上一个文件
:first 定位首文件
:last 定位尾文件
Ctrl + ^ 快速切换到编辑器中切换前的文件
:split 将打开的多个文件水平放置
:vsplit或:vs 将打开的多个文件垂直放置
:Ex 列出当前文件所在目录,便于查找文件
Ctrl+ww 依次切换下一个文件
Ctrl+6 切换不同文件
3.7 Nerdtree的使用及快捷键
ctrl+w+w 光标在左右窗口切换
ctrl+w+r 切换当前窗口左右布局
ctrl+p 模糊搜索文件
t 在新 Tab 中打开选中文件/书签,并跳到新 Tab
T 在新 Tab 中打开选中文件/书签,但不跳到新 Tab
gT 切换到前一个tab
g t 切换到后一个tab
o 展开左侧某个目录,再按一下就是合并目录
P 跳到根结点
p 跳到父结点
q 关闭 NerdTree 窗口
3.8 vimgrep插件使用及快捷键
vimgrep /pattern/ % 在当前打开文件中查找
vimgrep /pattern/ * 在当前目录下查找所有
vimgrep /pattern/ ** 在当前目录及子目录下查找所有
vimgrep /pattern/ *.c 查找当前目录下所有.c文件
vimgrep /pattern/ **/* 只查找子目录
注:如何忽略目录,如:
1.在~/.profile中添加 export GREP_OPTIONS="--exclude-dir=cscope\.out --exclude=tags"
2.source ~/.profile
3.9 cscope插件使用及快捷键
设置快捷键后,将光标听到某个字符串,可以通过输入Ctrl+\ ,然后输入字符的方式来执行;
之后可通过:copen的方式查看结果
3.10 VIM与SHELL切换
:shell 可以在不关闭vi的情况下切换到shell命令行
:exit 从shell回到vi