鸟哥链接:http://cn.linux.vbird.org/linux_basic/0310vi_2.php
u 撤销
dd 删除当前行并存到剪切板 , 删除从当前行开始的下面n行:ndd
p 粘贴剪切板
x 删除当前光标所在的字符
各种插入(会自动进入插入模式):
a 在当前光标后插入
o 换行(在光标所在行下开启一个行)
O (大写O)换行(在………… 上…………)
移动光标
h、j、k、l 分别代表左、下、上、右。前面加数字表示移动多少次,比如20h表示向上移动20次
n<space> 光标向右移动n个字符
n<Enter> 向下移动n次
翻页
Ctrl + f 相当于Page Donw
Ctrl + 相当于 Page Up
0 (数字零)跳到行头
^ 到该行第一个不是blank的字符那
$ 到行尾
g_ 到该行最后一个不是blank的字符那
/pattern 搜索pattern ,按n可以跳到下一个
Undo/Redo
u undo
ctrl + r redo
复制粘贴
yy 复制
p或者P 粘贴 p是粘贴到光标下一行 P是粘贴到前一行 这里试了一下 如果是dd之后p的话 就是前面说的这种情况 如果是x然后p的话就是在光标前后
剪切
d$ 从光标处剪切到行尾
选中
shift+v
缩进
< >分别朝两头缩进
打开/保存/退出/
:e <file path> 打开文件 可以e!强制执行 如果当前编辑没保存要打开另一个文件的话
:w 保存
:saveas <file path> 另存为
:x ZZ :wq 保存并退出
注意:上面这三种的区别
:x只有在有修改的情况下才会改变写入,更改时间戳,如果没有更改,时间戳是不会变的
:wq 无论有没有修改都会写入,更改时间戳
ZZ 不需要进入命令模式,也就是不需要打冒号。若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
:q! 退出不保存
:qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。
:bn 和 :bp 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。
行跳转
gg 到第一行
:N 跳转到第N行
NG 同上 所以gg相当于 1G
A 到行尾
G 到最后一行
H 移动到屏幕最上方的那行的第一个字符
按单词移动
w 到下一个单词的开头 e 到下一个单词的结尾
* 和 #: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
% : 匹配括号移动,包括 (, {, [. (需要把光标先移到括号上)
这些光标的移动很重要
比方说:0y$
意味着
0
→ 先到行头y
→ 从这里开始拷贝$
→ 拷贝到本行最后一个字符
多文件操作
方式一:
vim file1 file2 能打开两个文件,不过显示的当前的是file1
:n 转到下一个文件
:N 转到上一个文件
:files 列出开启的所有文件
这样就能实现多个文件之间的利用 nyy 复制 然后p粘贴的功能
方式二(多窗口):
比如,打开文件 vim f1,然后再输入 :sp f2 就可以在f1中打开f2,如果只输入:sp ,那么就是打开当前文件,这样方便对照着看,当文件很大的时候。
通过ctrl + w + 向上(k),ctrl + w + 向下(j)可以切换文件,然后进行复制操作,要退出的话,:q就可以了
搜索
/word 向光标之下寻找一个名称为 word 的字符串
?word 向光标之上寻找一个字符串名称为 word 的字符串
n 重复前一个搜索动作,就相当于你在浏览器Ctrl + f 然后不断Enter一样
N 与n反向
替换
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:『:100,200s/vbird/VBIRD/g』
:1,$s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2
:1,$s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代
代码折叠
vim 提供 6中折叠方式
manual 手工定义折叠
indent 更多的缩进表示更高级别的折叠
expr 用表达式来定义折叠
syntax 用语法高亮来定义折叠
diff 对没有更改的文本进行折叠
marker 对文中的标志折叠
可用选项 'foldmethod' 来设定折叠方式:set fdm=*****。
indent 对应的折叠代码有:
zc 折叠
zC 对所在范围内所有嵌套的折叠点进行折叠
zo 展开折叠
zO 对所在范围内所有嵌套的折叠点展开
[z 到当前打开的折叠的开始处。
]z 到当前打开的折叠的末尾处。
zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。