查看: 3009|回复: 0

[.NET源码] vim常用命令

发表于 2017-7-9 13:23:44

VIM一般分几种模式,通过不同模式来区分输入的到底是文字还是命令:
1. Normal mode(common mode,以下简称 c-mode):
一进入 VIM 就是处于 c-mode,只能输入指令,不能输入文字。这些指令可能是光标移动的指令,也可能是编辑指令或寻找替换指令。
2. Insert mode(i-mode):
按 i/a/o 会进入 i-mode,此时可以在编辑区输入文字,按 Esc 会回到 c-mode。
3. Ed mode(common-line mode,e-mode):
按:进入 e-mode,VIM命令提示区(编辑区最下方)会有一个冒号:出现,可以输入命令行命令,按 Esc 回 c-mode。
4.replace mode
按R进入替换模式,Esc返回c-mode

tips:在vim中Esc键需要经常使用,可以通过修改注册表将Esc键和Caps键的功能换一下。


光标在字符间移动
k    上移
h    左移 (Backspace )
l    右移 (空格键 )
j    下移

光标在单词间移动(光标可以跨行,默认一个单词由字母,数字和下划线组成)
E e(end) 先移动到当前单词结尾,若已经在结尾,则移动到下一个单词结尾
B b(begin) 倒退到当前单词的开头,若已经在开头,则移动到上一个单词开头
W w(word) 移动到下一个单词开头,标点符号也算一个单词
注意:大写的命令仅以空格作为单词间的分隔符,其他标点符号作为单词的一部分。


整行移动
0    移动到当前行首
^   移动到当前行的第一个非blank处
$    移动到当前行行尾
+    移动到下一行开头(主键盘区shift + ”=键”,Enter也可以)
-    移动到上一行开头
n|   移动到当前行的第n列

滚屏(光标跟着代码走)
Ctrl+f(forward)      往前滚动一整屏
Ctrl+b(backward)      往回滚动一整屏
Ctrl+d(down)       往上滚动半屏
Ctrl+u(up)         往下滚动半屏
Ctrl+e          往后滚动一行
Ctrl+y          往前滚动一行

用z调整行
zt(top)           将光标所在行移动到屏幕顶端
zz            将光标所在行移动到屏幕中间
zb(bottom)        将光标所在行移动到屏幕低端

在屏幕范围移动光标(不会滚屏)
H(hight)    将光标移动到屏幕顶端的行
M(middle)    移动到屏幕中央的行
L(low)      移动到屏幕底端的行
nH        移动到屏幕顶端往下的第n行
nL        移动到屏幕顶端往上的第n行

根据文本移动光标
% : 另一个对应的括号,包括(, {, [

根据文本块移动光标(编程时用得不多,编辑时使用)
文本块也就是句子、段落、小节等
( 移动到当前句子开头
) 移动到下一个句子开头
{ 移动到当前这一段开头
} 移动到下一段开头
[[ 移动到当前这一节的开头
]] 移动到下一节的开头
其中,VIM以? . !等符号来标记一个句子,空白行来标记一个段落。

根据行号来移动
G   移动到文本末尾
gg   移动到文本开头
nG    移动到第n行(同:n + enter命令一样)
Ctrl+g VIM显示区显示当前行的完整信息(从根盘符一直到当前行)
tips:``两个单反引号可以返回到使用G之前的位置,只能记住一个

插入
字符位置插入
i 在光标之前插入
I 在一行的开头处插入
a  在光标之后插入
A 在一行的结尾处追加
o 在光标所在位置的下一行打开新行插入
O 在光标所在位置的上一行打开新行插入
r 替换光标所在处一个字符

合并行
J 将下一行内容合并到当前行,中间空一个空格

字符删除
x 剪切光标所在处字符,不会自动跨行
X 剪切光标前一个字符
s 删除光标所在字符并进入插入模式(可以和v命令合用)
S 删除光标所在行并进入插入模式


单词删除
dw 从光标所在字符开始删除到下一个单词开头
de 删除到本单词末尾(标点也算一个单词)
dE 删除到本单词末尾(标点不算单词)
db 删除到前一个单词
dB 删除到前一个单词包括标点在内

行删除
dd 剪切本行所有内容
d$ 剪切本行光标位置(含)之后的所有内容(同shift D)
d0 剪切本行光标位置(不含)之前的所有内容

搜索

fa  在光标所在行搜索下一个字符a,不跨行
* 往后匹配一个光标当前所在的单词
# 往前匹配一个光标当前所在的单词
/xyz 往光标下搜索xyz字符串
?xyz 往光标上搜索xyz字符串
gd   跳到该单词定义的位置
n 下一个搜素目标
N 上一个搜索目标
:set hls 打开高亮
:set nohls 关闭高亮

标记

ma  将光标当前位置标记为a
'a   单引号加标记号,跳到标记处

复制(y)与粘贴
yw 复制从光标开始(含)到词尾的字符
yb 复制从光标开始(不含)到词首的字符
yy 将当前行复制到缓存区
nyy 将当前行向下n行复制到缓冲区
nyw 复制从光标开始的n个单词(标点符号算一个单词)
y^ 复制从光标到行首的内容(y$到行尾)
p 在光标之后粘贴剪切板里的内容
P 在光标之前粘贴剪切板里的内容
tips:含后不含前(往前不含当前光标所在字符,往后含当前光标所在字符)
另外可以给缓存区做标记,方便以后引用,需要用到双引号:
"ayy, "byy等,使用时"ap或"bp,粘贴不同的内容。

替换
:s/old/new     用new替换当前行中首次出现的old
:s/old/new/g    用new替换行中所有的old
:n,m s/old/new/g 用new替换从n到m行里所有的old
:%s/old/new/gic 用new替换当前文件里所有的old,c为confirm

修改(c):指先删除,再进入编辑
通过c指令后面的参数,删除相应的内容,然后进入编辑模式修改。
C或c$ 对当前行光标后面的内容进行修改
c0或 c^   对从光标处到当前行行首的内容进行修改
cc 或S 对当前行进行修改
cw      对光标所在字符到该单词结束部分进行修改(先删除再进入编辑状态)
cfx 或cFx 对从光标到下一个字符 x 之间的文本进行修改
cFx 对从光标到上一个字符 x 之间的文本进行修改
cG      表示对当前行至文本末行内容进行修改
tips:c 命令所删除的数据都存在缓冲区, 可以粘贴使用。

重复
.      重复上一次的命令
N 重复某个命令N次,esc键执行该组合命令,enter键表示光标换行。

  10I*:在一行开头输入十个*
  5o###:在下5行中每一行开头插入###
  5h:左移5次
  n+:向下跳n行
  n-:向上跳n行
  nx:剪切从光标开始的n个字符
  3dd:删除3行

撤销
u 撤销上一步操作,可执行多次
U 撤销对当前行的所有操作
Ctrl+r 反撤销

visual模式
在可视化模式下,通过高亮显示,不但可以看到将要被操作的对象,而且可以对选中的文本块整体进行操作。
v 进入字符可视化模式,文本选择是以字符为单位。
V 进入行可视化模式,文本选择是以行为单位。
ctrl-V或ctrl-Q 进入块可视化模式
gv    再次选中前一次可视化模式时选择的文本

可视模式下:

o光标移动到块区的对角,O移动到水平的另一边。
vi[或vi’或vi} 选中当前光标所在的整个[]或’’或{}内的内容
va[或va’或va} 同上,而且符号本身也会被选中
viw 选中一个单词

代码格式化
对代码进行缩进处理,用等号命令: =
  全部格式化 : gg=G
  对当前行格式化: ==
  对多行格式化: [count] ==
  对选区格式化:选中后 [count] > 右移count个tab

分屏

:sp  同一个文档垂直分隔成两个屏幕,可以显示不同内容

打开/保存/退出/改变文件
:e   打开一个文件
:w  保存文件
:saveas   另存为
:wq  保存并退出
:q!  退出不保存
:qa!  强行退出所有的正在编辑的文件,就算别的文件有更改。
:bn 和 :bp  可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。



回复

使用道具 举报