如何快速的使用vim
本文将介绍如何快速的使用vim, 主要是使用vim的快捷键来达到快速使用的目的。
1. 文件操作
:e filename
打开文件
:e!
重新编辑当前文件,忽略所有的修改
:q!
不保存退出
:q
退出,如果文件有修改,则提示并返回
:w
保存当前编辑文件
:x
/:wq
保存并退出
:%!xxd
按十六进制查看当前文件
:%!xxd -r
从十六进制返回正常模式
:n1,n2 co n3
将 n1 行到 n2 行之间的内容拷贝到第 n3 行下。
:n1,n2 m m3
将 n1 行到 n2 行之间的内容移至第 n3 行下。
:n1,n2 d
将 n1 行到 n2 行之间的内容删除。
:n1,n2 w filename
将 n1 行到 n2 行之间的内容保存到文件 filename 中
:n1,n2 w! Command
将文件中n1行到n2行的内容作为 Command的输入并执行之, 若不指定 n1、n2,则将整个文件内容作为 Command 的输入。
:r! Command
将命令 Command 的输出结果放到当前行。
:nr <文件>
把<文件>插入到第n行
:so <文件>
读取<文件>,再执行文件里面的命令(文件中的命令应该都是一些ex命令)
:l1,l2w <文件>
把第l1和第l2行之间的文本写到<文件>中去
:w >> <文件>
添加到<文件>末尾. 也可以使用行号
2. 基本操作
i
在当前位置进入编辑模式
I
移动到行首并进入编辑模式
a
向后移动一个字符并进入编辑模式
A
移动到行尾并进入编辑模式
o
在当前行下面增加一行并进入编辑模式
O
在当前行上面增加一行并进入编辑模式
s
删除当前字符并进入编辑模式
S
删除当前行并进入编辑模式
u
撤销
^r
撤销的撤销
J
把下一行合并到当前行尾
r+字符
替换当前字符
R
替换当前字符及其后的字符,直至按 ESC 键。
daB
删除{}及其内的内容
diB
删除{}中的内容
guu
行小写
gUU
行大写
g~~
行大小写翻转
:ab str1 str2
输入str1按空格即变为str2
di+标点符号
删除标点符号内的内容
da+标点符号
删除标点符号及标点符号内的内容
ci+标点符号
更改标点符号内的内容
ca+标点符号
更改标点符号及标点符号内的内容
3. 移动
h
j
k
l
分别对应向左,向下,向上, 向右移动一个位置
3h 或者 3左方向键
3j 或者 3下方向键
3k 或者 3上方向键
3l 或者 3右方向键
分别对应向左,向下,向上, 向右移动3个位置
3 + space键
移动到本行第3个字符
3 + 回车键
移动到当前行的向下第3行
:3
或者 3G
移动到文件第3行
H
或者 M
或者 L
分别移动到当前屏幕的第一行,中间行,或者最后一行的第一个字符处
(
将光标移至上一个句子的开头。
)
该命令将光标移至下一个句子的开头。
{
该命令将光标向前移至上一个段的开头
}
该命令将光标向后移至下一个段的开头。
[[
移动到当前这一节的开头
]]
移动到下一节的开头
[(
移动到最近的 ( 处
])
移动到最近的 ) 处
]}
移动到最近的 } 处
[{
移动到最近的 { 处
0
到行首
^
到行首非空白字符位置
$
到行尾
gg
到文件头
G
到文件尾
w
向后移动一个单词
b
向前移动一个单词
e
移动当前单词尾或下一个单词尾
E
和e
一样,但以空格作为分隔
>>
向右移动一个Tab的位置
<<
向左移动一个Tab的位置
3>>
当前行及后面两行向右移动一个Tab的位置 (列移动)
3<<
当前行及后面两行向左移动一个Tab的位置 (列移动)
^u
向文件首翻半屏。
^d
向文件尾翻半屏。
^f
向文件尾翻一屏。
^b
向文件首翻一屏。
3z
将第 n 行滚至屏幕顶部。不指定 n 时将当前行滚至屏幕顶。
z.
将当前光标所在行移到屏幕中间
zt
将当前光标所在行移到屏幕顶部
zb
将当前光标所在行移到屏幕底部
4. 窗口操作
4.1 Tab
tabs
列出当前所有tab
tabc
关闭tab
tabe 文件名
在新的Tab中编辑文件
数字gt
切换tab (数字为tab编号)
4.2 Buffer
ls
or buffers
or files
显示当前已打开的buffer
b2
可切换buffer (数字为buffer list中的编号)
bn
buffer列表中下一个 buffer
bp
buffer列表中前一个 buffer
b#
上一次操作的buffer
badd name1
or bad name1
增加一个buffer
bdelete name1
or bd name1
删除一个buffer
4.3 Window
^w
+ h
或者 j
或者 k
或者 l
分别对应移动左边,或者下边,或者上边,或者右边窗口
:res +5
, :res -5
分别增加或减少窗口5行的高度
:vert res +5
, :vert res -5
分别增加或减少窗口5列的宽度
:vne [filename]
:sp [filename]
:S [filename]
:new [filename]
:^w + ^r
交换两个窗口的位置
^w =
窗口等宽
5. Visual 模式
v
在编辑状态下按v进入可视化编辑状态
V
在编辑状态下按V进入可视化行编辑状态
^v
进入块编辑状态,可以选择块
x
删除选中的区域,
I
进入插入模式,输入要插入的文本,按 esc 插入;
A
进入追加模式,同上;
c
进入替换模式,输入替换字符后按 esc 执行替换;
>
右移,添加空格,使用 :set shiftwidth=n 来设置一次 > 移动的空格数;
<
左移,同上,无空格时忽略命令;
~
大小写互换;
u
全部变为小写;
U
全部变为大写;
ab
选择()中的内容
ib
选择()中的内容( 不含() )
aB
选择{}中的内容
iB
选择{}中的内容( 不含{} )
%
选择{}中的内容, 当前光标需在”{“处
vi+标点符号
选中标点符号内的内容
va+标点符号
选中标点符号及标点符号内的内容
6. 复制与粘贴
.
重复上次的操作
yy
复制整行
y3y
复制当前行及后面两行, 即复制当前行起的3行
p
粘贴
P
将内容粘贴到上一行
yi+标点符号
复制标点符号内的内容
ya+标点符号
复制标点符号及标点符号内的内容
7. 折叠
zi
打开关闭折叠
zv
查看此行
zm
关闭折叠
zM
关闭所有
zr
打开
zR
打开所有
zc
折叠当前行
zo
打开当前折叠
zd
删除折叠
zD
删除所有折叠
8. 查找与替换
f
向后查找,如f{
是向后查找第一个{
, 前面加数字是查找第几个
F
向后查找
*
向后查找当前光标所在位置的单词, g*
部分匹配
#
向前查找当前光标所在位置的单词, g#
部分匹配
%
查找当前光标所在位置的括号所匹配的括号,对花括号和圆括号, 方括号都有效, 常用于手工检查括号是否匹对.
/string
向光标之下寻找一个名称为string字符串
?string
向光标之上寻找一个名称为string字符串
:2,7s/ddd/fff/g
在文件中从2行至7行将ddd替换成fff
:1,$s/string1/string2/g
从文件的第一行至最后一行,将string1替换成string2
:%s/string1/string2/g
同上
:1,$s/string1/string2/gc
同上,在执行前需确认
:g/str/s/str1/str2/g
包括str的行所有的str1都用str2替换
:%s/f $/for$/g
将每一行尾部的“f ”(f键和空格键)替换为for
:%s/^/mv /g
在每一行的头部添加“mv ”(mv键和空格键)
:s/fred/<c-r>a/g
替换fred成register a中的内容,呵呵
:g/<input|<form/p
显示含
9. 标记(mark)
m[a..z]
标记当前所在位置(行和列所指定的位置)为26个字母中的一个,如: ma将当前位置标记为a
'[a..z]
跳转到标记所在位置的行首,如’a光标将跳转到标记为a的位置的行首
`[a..z]
跳转到标记所在位置,如`a光标将跳转到标记为a的位置(行和列所指定的位置)
''
两个单引号在当前标记和上一个标记跳转
:marks
显示所有标记
delmarks 标记
删除标记
10. 寄存器
寄存器前面是双引号开始
-
数字寄存器
-
"0
寄存器”0保存上一次复制(y)操作的文本
-
"1到"9寄存器
保存最近9次删除的文本行(注意这个“行”字),”1保存的内容是最最近一次删除的内容(也就是说最后一次执行删除命令保存的内容)”2保存的是倒数第二次删除的内容,依此类推,直到”9,如果又有新的操作,那么”9的内容将会被”8的内容替换,先前”9的内容将被丢弃。
字母寄存器
-
"a,"b,"c...都是字母寄存器
也许你执行:reg的时候看不到这些命令,不要紧,稍后就有了。之前粘贴我们用的都是p命令,如果我想粘贴其他寄存器里面的内容呢,你想到了吗?答案就是:寄存器的名称+p。现在我们新建一个字母寄存器,把当前三行保存到”a寄存器中去,具体操作如下:在normal模式下输入”a3yy,这样当前三行就保存在”a中去了,粘贴同样在normal模式下,”3p 即可。如果是大写字母的寄存器,如执行:”Cdd:他的作用是把当前行删除,再把内容追加到”c寄存器中,也就是说字母寄存器没有大写之分,只是功能上有区别,大写就是追加,小写是替换。 |
其它
-
""
无名寄存器,p命令粘贴的内容,保存最近一次删除或复制的内容。
-
“-
小删除寄存器(small delete register),前面说过要您注意这个”行“字,也就是说并不是所有删除的文本都会保存在数字寄存器中,如果你删除的只是一个单词或字母: dw或者x,那么这个单词并不会保存在”1寄存器中,而是保存在”-寄存器里面。所有不包含换行符的删除都会保存在此寄存器中
-
"*
系统寄存器
11. 排版
:ce(nter)
居中显示光标所在行
:ri(ght)
靠右显示光标所在行
:le(ft)
靠左显示光标所在行
12. 其它
:!command
执行shell命令
可编辑命令
q:
进入命令编辑窗口,此时可以选择或编辑命令,实现命令行的复制,粘贴等都可以
q/
进入查找编辑窗口
q?
进入帮助编辑窗口