vim fast

 

http://easwy.com/blog/archives/advanced-vim-skills-auto-complete/

vi/vim使用进阶

 

 

 

 

 

http://www.vimer.cn/  

vimer的程序员世界

 

 dw 删除一个单词

dnw 删除n个单词

 

 

 

1 查找

/xxx(?xxx) 表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示
向上查找其中xxx可以是正规表达式,关于正规式就不多说了
一般来说是区分大小写的, 要想不区分大小写, 那得先输入
:set ignorecase
查找到以后, 再输入 n 查找下一个匹配处, 输入 N 反方向查找

*(#) 当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的
下(上)一个单词 同样, 再输入 n 查找下一个匹配处, 输入 N 反方
向查找

g*(g#) 此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而
是匹配包含该单词的所有字符串

gd 本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的非
注释段中第一次出现这个单词的地方

% 本命令查找与光标所在处相匹配的反括号, 包括 () [] { }

f(F)x 本命令表示在光标所在行进行查找, 查找光标右(左)方第一个x字符
找到后:
输入 ; 表示继续往下找
输入 , 表示反方向查找

2 快速移动光标
在 vi 中, 移动光标和编辑是两件事, 正因为区分开来, 所以可以很方便的进行光标定
位和编辑 因此能更快一点移动光标是很有用的

w(e) 移动光标到下一个单词
b 移动光标到上一个单词

0 移动光标到本行最开头
^ 移动光标到本行最开头的字符处
$ 移动光标到本行结尾处

H 移动光标到屏幕的首行
M 移动光标到屏幕的中间一行
L 移动光标到屏幕的尾行
gg 移动光标到文档首行
G 移动光标到文档尾行

c-f (即 ctrl 键与 f 键一同按下) 本命令即 page down
c-b (即 ctrl 键与 b 键一同按下, 后同) 本命令即 page up

'' 此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查
找到某个单词后, 再输入此命令则回到上次停留的位置

' 此命令相当好使, 它移动光标到上一次的修改行

` 此命令相当强大, 它移动光标到上一次的修改点

3 拷贝, 删除与粘贴
在 vi 中 y 表示拷贝, d 表示删除, p 表示粘贴 其中拷贝与删除是与光标移动命令
结合的, 看几个例子就能够明白了

yw 表示拷贝从当前光标到光标所在单词结尾的内容
dw 表示删除从当前光标到光标所在单词结尾的内容
y0 表示拷贝从当前光标到光标所在行首的内容
d0 表示删除从当前光标到光标所在行首的内容
y$ 表示拷贝从当前光标到光标所在行尾的内容
d$ 表示删除从当前光标到光标所在行尾的内容
yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容
dfa 表示删除从当前光标到光标后面的第一个a字符之间的内容


特殊地:
yy 表示拷贝光标所在行
dd 表示删除光标所在行
D 表示删除从当前光标到光标所在行尾的内容

关于拷贝, 删除和粘贴的复杂用法与寄存器有关, 可以自行查询

4 数字与命令
在 vi 中数字与命令结合往往表示重复进行此命令, 若在扩展模式的开头出现则表示行
号定位 如:

5fx 表示查找光标后第5个x字符

5w(e) 移动光标到下五个单词

5yy 表示拷贝光标以下 5 行
5dd 表示删除光标以下 5 行


y2fa 表示拷贝从当前光标到光标后面的第二个a字符之间的内容

:12,24y 表示拷贝第12行到第24行之间的内容
:12,y 表示拷贝第12行到光标所在行之间的内容
:,24y 表示拷贝光标所在行到第24行之间的内容 删除类似

5 快速输入字符
在 vi 中, 不要求你输入每一个字符, 可以有很多种方法快速输入一些字符
使用 linux/unix 的同学一定有一个经验, 在命令行下输入命令时敲入头几个字符再按
TAB 系统就会自动将剩下的字符补齐, 假如有多个匹配则会打印出来 这就是著名的命令
补齐(其实windows中也有文件名补齐功能) vi 中有许多的字符串补齐命令, 非常方便

c-p(c-n) 在编辑模式中, 输入几个字符后再输入此命令则 vi 开始向上(下)搜
索开头与其匹配的单词并补齐, 不断输入此命令则循环查找 此命令
会在所有在这个 vim 程序中打开的文件中进行匹配

c-x-l 在编辑模式中, 此命令快速补齐整行内容, 但是仅在本窗口中出现的
文档中进行匹配

c-x-f 在编辑模式中, 这个命令表示补齐文件名 如输入:
/usr/local/tom 后再输入此命令则它会自动匹配出:
/usr/local/tomcat/

abbr 即缩写 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个
字符串 比如编写java文件的常常输入 Systemoutprintln, 这很
是麻烦, 所以应该用缩写来减少敲字 可以这么做:
:abbr sprt Systemoutprintln
以后在输入sprt后再输入其他非字母符号, 它就会自动扩展为System
outprintln

6 替换
替换是 vi 的强项, 因为可以用正规表达式来匹配字符串以下提供几个例子

:s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
:s//<aa/>/bb/g 将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词
:%s/aa/bb/g 将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/^/#/ 将从12行到23行的行首加入 # 字符
:%s= *$== 将所有行尾多余的空格删除
:g/^/s*$/d 将所有不包含字符(空格也不包含)的空行删除

 

 

 

 

 

 

 

 

 

 

 

插入:
“i”从光标所在位置前开始
“I”光标移到当前行的行首,然后在其前插入文本
“a”光标当前所在位置之后追加新文本
“A”命令将把光标挪到所在行的行尾
“o”在当前行的下面插入新行
“O”在当前行的上面插入新行

一.移动
(1). 按字移动光标的命令
在Vi中,"字"有两种含义:一种是广义的字,它可以是两个空格之间的任何内容。
如:{int k;它只有2个字,一个是{int ,另一个是k;
另一种字是狭义上的字,在此种意义之下,英文单词、标点符号和非字母字符(如$、%、^、&、*、(、)、-、+、{、}、[、]、~、|、/、<、>、/等)均被当成是
一个字。上面那一行中就包括{、int、k、;这4个字。
Vi中使用大写命令一般就是指将字作为广义来对待,使用小写命令就是作为狭义对待。
1. w和W命令:将光标右移至下一个字的字首,它们的区别是:w命令,把光标移到下一个字(狭义)的字首,W命令,将把光标移到下一个字(广义)的字首。
2. e和E命令:如果光标起始位置处于字内(即非字尾处),则该命令将把光标移到本字字尾;如果光标起始位置处于字尾,则该命令将把光标移动到下一个字的字尾。
3. b和B命令:如果光标处于所在字内(即非字首),则该命令将把光标移至本字字首;如果光标处于所在字字首,则该命令将把光标移到上一个字的字首。

(2). 按句移动光标的命令
在Vi中,句子被定义为以逗号(,)、句号(.)、问号(?)和感叹号(!)结尾,且其后面跟着至少两个以上(含两个)空格(外国人使用打字机留下的习惯)或一个换行符的字符序列。这个定义和习惯的用法有很大出入,注意使用。
1.( 命令:将光标移至上一个句子的开头;
2. )命令:将光标移至下一个句子的开头。

(3). 按段移动光标的命令
在Vi中,一个段被定义为是以一个空白行开始和结束的片段。
1. { 命令:将光标向前移至上一个段的开头;
2. } 命令:将光标向后移至下一个段的开头。

(4). 滚屏命令
CTRL+U 将屏幕向前(文件头方向)翻滚半屏;提示:u表示 up;
CTRL+D 将屏幕向后(文件尾方向)翻滚半屏。提示:d表示 down;

可以在这两个命令之前加上一个数字n,则屏幕向前或向后翻滚n行。并且这个值被系统记住,以后再用CTRL+U 和CTRL+D 命令滚屏时,还滚相应的行数。
CTRL+F 将屏幕向文件尾方向翻滚一整屏(即一页);提示:f表示 forward;
CTRL+B 将屏幕向文件首方向翻滚一整屏(即一页)。提示:b表示 backward;

同样也可以在这两个命令之前加上一个数字n,则屏幕向前或向后移动n页;
CTRL+E 将屏幕向上滚动一行;
CTRL+Y 将屏幕向下滚动一行。

(6). 移动到行首或行尾
“$”命令把光标移动到当前行行尾。如果你的键盘上有<End>键,也可以完成相同的功能。
“^”命令把光标移动到当前行的第一个非空字符,
“0”命令则移到一行的第一个位置, <Home>键也可以完成相同的功能。
“$”命令接受个数前缀。1$表示:移动到当前行的行尾;2$表示:移动到下一行的行尾;如此类推。
"0”和“^”不接受个数前缀。

(7). 移动到一个特定的字符
“fx”命令向前查找本行中的单字符x,并把光标移动到字符x上。提示:“f”表示“Find”。
“Fx”命令用于向左查找,“fx”命令的反向版本。
“tx”命令把光标移动到目标字符的前一个字符上。提示:“t”表示“To”。
“Tx”"tx"命令的反向版本,移动到字符的后面。
可以在这四个命令前面加数字前缀。
"fF"命令可以通过“;”命令重复,“,”命令则用于反向重复。用于“tT"命令会出现正确而愚蠢的问题。
(8). 括号匹配
“%”是一个非常方便的命令,它能匹配一对括号(即“( )”,“[ ]”,“{ }”)。
如果光标在“(”上,它移动到对应的“)”上,反之,如果它在“)”上,它移动到“(”上。
当光标不在一个有用的字符上,“%”会先向前找到一个,然后会移动到它的匹配处。
(9). 移动到特定的行
“G” 命令把光标移动到文末;
“gg”命令把光标移动到文首;
“nG”命令把光标移动到第n行的第一个空白字符上,可用“:set number<Enter>”来显示行号,用“:set nonumber<Enter>”来关闭显示;
“n%" 命令以百分数来移动光标;
“H” 命令把光标移动到屏幕的第一行;
“M” 命令把光标移动到屏幕的中间行;
“L” 命令把光标移动到屏幕的最后一行;
提示:“H”表示“Home”,“M”表示“Middle”而“L”表示“Last”。
(10). 使用记号(mark)
当用“G”命令跳到另一个地方,Vim会记住你从什么地方跳过去的,这个位置成为一个记号(mark)。可以成为记号的还有查找命令:“/”和“?”,而"ftwehjkl"命令不是。
要回到原来的地方,使用如下命令: `` (两个反引号,<Tab>的上方);
如果再次执行这个命令你会跳回去原来的地方;
CTRL-O命令跳到一个“较老”的地方(提示:O表示older);
CTRL-I命令跳到一个“较新”的地方(提示:I在键盘上仅靠着O);
“mx”命令可以标记当前的光标位置,x可以是任意一个小写字母(a-z);
“`x”命令跳到你定义的标记处,x是你用mx命令定义的标记;
“'x”(单引号加上一个标记)跳到标记所在行的行首,注意和上一个命令区别开。

复制,删除,移动

(一). 删除功能
“dd” --删除一行;
“D” --删除到行尾,即“d$”;
“x” --删除光标所在字符,即“dl”;
“X” --删除光标左边的字符,即“dh”;
“dw” --从当前位置删除到下一个单词开头;
“daw”--删除光标上的单词(包括空白字符);
“dG” --删除到文末;
“dgg”--删除到文首;

(二). 修改文本
“c”命令表示修改,即change。它的作用与“d”操作符相似,只是完成后会切换到插入模式;
“cw”--修改一个单词;
“C” --修改到行尾,即“c$”;
“s” --修改一个字符,即“cl”;
“S” --修改一整行,即“cc”;

(三). 重复一个修改
“.”是Vim中一个非常简单而有用的命令。
它重复最后一个除“u”(undo),CTRL-R(redo)和冒号命令外的修改操作。


(四). 可视模式
用“v”命令启动可视模式:移动光标到需要的地方,选中的文本会被高亮显示。最后执行“操作符”命令,如删除命令“d”,复制命令“y”。
用“V”命令,对整行做选中操作,这时“h”,“l”会不起作用。
用“CTRL+V”命令处理一个矩形块内的文本。在使用块可视模式的时候,会有四个角,“o”命令把光标移动到对角上;而“O”则能移到同一侧的角上。
技巧:“~”来改变选中文本的大小写;
“u”全部变为小写;
“U”全部变为大写。
“J”合并选中的行。

(五). 复制文本
剪切:先用“d”,“x”或者其他命令删除文本的时候,这些文字会被保存起来。然后用“p”命令把文字重新粘贴出来(提示:p表示put)。
复制,粘贴:先用“y”命令,然后用“p”命令粘贴出来。提示:“y”即Yank。
“yy” --复制一行;
“Y” --也时复制一整行;
“y$” --复制到行尾;
“yw” --复制一个词。这几个都可以加上数字前缀;
技巧:用可视模式来选择文本,简单直观。
提示:“y”“p”可以是不同文件。

使用寄存器复制文件
寄存器是Vim用来保存文本的地方。用一个小写字母表示来表示寄存器。
比如:“"fyas”,复制一个句子到寄存器f 中。
“"fp”,使用寄存器f。

编辑多个文件

(一). 编辑另一个文件
“:edit xxx” :关闭当前文件,打开另一个;
“:edit! xxx” :不保存当前文件,打开另一个;
“:hide edit xxx”:编辑另一个文件,但是不马上保存当前文件,只是隐藏它;
(二). 同时打开多个文件
“vi xxx1 xxx2 xxx3”,打开三个文件;
“:next”“:next!”“:wnext”,编辑下一个文件;
“:previous”“:previous!”“:wprevious”,编辑前一个文件;
提示:可以加数字前缀。
(三). 在文件中快速跳转
<CTRL+^>(在英美式键盘中,^ 在6的上面):跳到上一个的文件,再用这个命令就会跳回来;
“`"”:跳转到上次离开这个文件时的位置;
“`.”:跳转到最后一次修改文件的位置;
使用文件标记:“mX”和“`X”命令,以及用CTRL+I 和 CTRL+O 来跳转;
注意:这里的 X 必须是大写字母,表示全局。

分割窗口

(一).
1. 分割窗口
水平分割 垂直分割
:split :vsplit
:split xxx :vsplit xxx
:new :vnew

2. 关闭窗口
方法1,“:quit”和ZZ;
方法2,“:close”命令,它可以避免剩下最后一个时退出vim;
方法3,“:only”命令,关闭其他所有窗口;

3. 改变窗口大小
要扩大窗口:“<CTRL+W> +”;
要缩小窗口:“<CTRL+W> -”;

4. 窗口之间跳转
CTRL-W w 用于在窗口间跳动
CTRL-W h 跳转到左边的窗口
CTRL-W j 跳转到下面的窗口
CTRL-W k 跳转到上面的窗口
CTRL-W l 跳转到右边的窗口

5. 用 vimdiff 显示区别
方法1:从shell启动,比如:vimdiff main.c~ main.c
方法2: 从vi中启动diff模式:“:vertical diffsplit xxx”,如果没用“vertical”,就会水平分割屏幕。
方法3: 如果有patch或者diff文件:先编辑这个文件,然后告诉 Vim patch 文件的名称。例如:
:edit main.c
:vertical diffpatch main.c diff
作大修改

介绍如何做要重复多次的修改和如何改动大量的文字

1. 记录与回放命令
方法1.使用“.”命令重复前一个修改操作,但它不能完成复杂功能;
方法2.使用记录命令,步骤如下:
1. “q{register}”命令启动一次击键记录,结果保存到{register}指定的寄存器中。寄存器名可以在a到z中任取一个字母表示。
2. 输入你的命令;
3. 键入“q”(后面不用跟任何字符)命令结束记录;
4. 用“@{register}”命令执行这个宏;
提示:“@@”命令,重复执行上一次的宏。

2. 使用,修改寄存器
用来记录操作的寄存器与你用来拷贝文本的寄存器是相同的。
使用方法:
G 移到行尾(注:这里其实使用new命令开窗口更方便些)
o<Esc> 建立一个空行
"np 拷贝n寄存器中的文本,你的命令将被拷到整个文件的结尾
{edits} 象修改普通文本一样修改这些命令
0 回到行首
"ny$ 把正确的命令拷贝回n寄存器
dd 删除临时行

3. 扩展一个寄存器
记录到一个大写寄存器表示扩展命令到对应的小写寄存器。
替换

“:substitute”命令(可以简写为“:s”)使你可以在连续的行中执行字符串替换。
格式:“:[range]s/old/new/[flags]”
说明如下:
1.用“n,m”表示从第n行到第m行;如果不指定行范围,“:s”命令只作用在当前行上。
2.“.”表示当前行,“$”表示最后一行;“%”表示命令作用于全部行,即“1,$”。
3.可以用“+ -”号,比如“n+x,m-y”,nm可以是“.”和“$”。
4.使用可视模式来设定范围;注意:命令是作用于行范围的,而不是选中的范围的。
5.默认情况下,命令只对一行中的第一个匹配点起作用,要让对行中所有匹配点起作用,需要加一个“g(global,全局)”标记;
其他标记:“p”(print,打印),用于在命令执行的时候打印出所有被修改的行;
“c”(confirm,确认),在每次替换前向你询问是否需要替换。

插入文件
“:read {filename}”命令读入文件,插入当前行的下面;
“:nread {filename}”命令用“n”指点插入行的行号,其中数字“0”表示文件开头,“$”表示文件尾;

保存部分行
要把一部分行写入到文件,可以使用“:write”命令;
在没有指定范围的时候它写入全文,而指定范围的时候它只写入范围指定的行;
如果这个文件已经存在,而你一定要写入,就加一个叹号;
小心:“!”必须紧跟着“:write”,中间不能留有空格,否则这将变成一个过滤器命令;
“:write >>{filename}”用于往文件中追加内容;

使用外部程序
命令“{motion}{program}”用一个外部程序对一个文本块进行过滤。
换句话说,它执行一个由{program}指定的外部命令,并用一个文本块作为输入,
然后用该程序的输出代替选中的文本块。

从崩溃中恢复

方法1. 知道文件名,可以用“-r”选项启动Vim:“vim -r xxx”;
方法2. 不知道文件名,进入原来的文件夹执行:“vim -r ""”;
方法3. 用“vim -r”列出所有它能找到的交换文件,然后用方法1;

折叠


折叠命令:
zf F-old creation (创建折叠)
zo O-pen a fold (打开折叠)
zc C-lose a fold (关闭折叠)
zr 打开嵌套折叠(“zR”用于全部打开)
zm 关闭嵌套折叠(“zM”用于全部关闭)


在代码间移动

使用标记
1:创建标记文件:“ctags {filename}”,或者“ctags -R”;
2:把光标移到要查看的单词的标记处,然后用<CTRL+]>命令;
3:用<CTRL+T>返回;
技巧:“CTRL-W ]”用新开窗口查看;


在代码间移动
“[]” 向上跳转到一个函数的结尾,“][”向下移动到一个函数的结尾;
“[[” 向上跳转到函数的开始,“]]”向下跳到结尾处;
注意:这四个命令要求“{”“}”符号在第一列;
“[{” 跳转到当前代码块{}的开始处,“[}”跳转到当前代码块{}的结尾处;
“]{”“]}”“[(”“[)”“](”“])”“[/”“]/”也有类似功能,只是匹配的是“()”“/*”

“[I” 命令查找光标下的标识符,不仅在当前文件内查找,还会在所有的包含文件中查找;
“[<Tab>” 跳到第一项,<Tab> 可以是<CTRL+I>;
“n[<Tab>” 跳到第n项;
“]I” 只列出光标下面的项目

“[D” 只查找 "#define" 定义的宏,
“]D” 只列出光标下面的项目
“gD” 只在当前文件中查找,并跳转到被首次使用的地方;
“gd” 只在当前函数内查找,注意,函数的开始符号“{”要求在第一列;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

指令 – 作用
所以输入的时候别把<空格>-也带进去

0 – 到行首
$ – 到行尾
^ – 到行首字母
( – 到上面一句或者上面一个代码段
) – 到下面一句或者下面一个代码段
`. – 到最后一次修改的位置,注意这个`不是单引号,是1左边的那个按键
/<文字> – 搜索指定文字,找到之后使用n来跳到下一个相同单词位置
:<数值> – 转跳到指定行数
:$ – 转跳到文件末尾,这个和G的作用相同,但是我觉得更加好记,因为和转跳行数一样,而且$一般被用来标识末尾

i – 插入模式,I也可以,还有a,A,但是个人感觉提高效率不明显
o – 在当前行下面建立新行,对应的有O,在当前行上面,但是O很少用,除非你已经到顶行而且要在上面插入一行.

v – 进入区块选择
y – 复制已经选择的区块
yy – 复制当前行
d – 剪切已经选择的区块
dd – 剪切当前行
p – 粘贴已经选择的区块

. – 重复上次指令
<数值><指令> – 重复执行指定的指令,例如10dd,剪切10行

% – 匹配花括号,方括号,括号等,用于例如跳转到对应的{}位置
gd – 到达光标所在处函数或者变量的定义处
> – 缩进代码,在v下可用
>> – 缩进当前行代码
< – 反缩进代码,在v下可用
<< – 反缩进当前行

 

 

 

 

 

 

 

 

vimtutor    vim教程

 

 

 

 

 

 

 

你可能感兴趣的:(windows,vim,文档,扩展,patch,fold)