0x06 Vim选取、复制、粘贴
-
visual模式是用来进行选取的。可以在normal模式下按下"v"键来进入此模式。当然退出此模式的方法同样是"Esc"或Ctrl+"["。
-
在visual模式下, 对光标的移动方式与normal模式的移动方式相同。一旦光标移动,那么就会选取光标起始位置与移动后位置之间的所有内容。
-
在visual模式下,"V"键会将模式调整成visual line。此行为将选取光标所在行的全部内容(整行选取的快捷操作)。
-
在visual模式下,选取之后,可以通过"y"(yank的缩写)来进行复制。还可以通过"yy"来进行光标所在行地整行复制。
如果要连续复制多行,可以通过"数字"+"yy"来进行操作("数字"是要复制的行数)。
如果要复制光标所在位置到本行行末,则可以使用"y"+"$“来进行操作。同理,如果要复制到光标所在位置的本行行首,则可以使用"y”+"0"来进行操作。
如果要复制光标所在行到全文最后,则可以使用"y"+“G"来进行操作。同理,如果要复制光标所在行到全文最前,则可以使用"y”+"gg"来进行操作。
当然,“y"键还可以和”{“或”}"组合使用用来选择,这里不再赘述,可以自行尝试。
-
在normal模式下,通过"p"(paste的缩写)来进行粘贴。还可以"数字"+"p"进行多次粘贴("数字"为粘贴次数)。
注:在进行粘贴时,要注意粘贴时光标的位置。
在Vim中,使用"p"进行粘贴,如果是一个单词,则默认的粘贴位置是在光标所在位置后面的一个字符位置开始。如果是整行,则默认的粘贴位置是在光标所在行的下面一行位置开始。
在Vim中,使用"P"进行粘贴,如果是一个单词,则默认的粘贴位置是在光标所在位置前面的一个字符位置开始。如果是整行,则默认的粘贴位置是在光标所在行的上面一行位置开始。
-
回到上一步,可以使用"u"键来进行操作("u"是undo的缩写),类似于windows中的Ctrl+“z”。
重复上一步,可以使用Ctrl+"r"键来进行操作("r"是redo的缩写),类似于windows中的Ctrl+“y”。
-
在Vim中,有寄存器的概念。其中有26个可以被随机使用,这26个寄存器分别用26个小写字母来对应。
例如:(由于下面例子中会使用到"符号,因此每个按键符号不再使用""符号包裹,避免混淆。)
如果要将一个book保存在a寄存器,则可以先选中文档中的book,然后使用"+a+y来保存它。若要将该内容进行粘贴,则使用"+a+p。
如果要将一个good保存在b寄存器,则可以先选中文档中的good,然后使用"+b+y来保存它。若要将该内容进行粘贴,则使用"+b+p。
因为book和good分别处于不同的寄存器,所以在执行粘贴的时候,可以先后顺序随意,反正都是从不同的寄存器中调出信息,不会冲突。
注:这里的寄存器和操作系统剪贴板概念不同。在剪贴板中,后面选取复制的内容会将早先的覆盖掉(剪贴板中只会存放一个数据单元)。
-
在Vim中,默认情况下,其寄存器与外界的操作系统剪贴板是不相通的。若要实现相通,则可以使用":set clipboard=unnamed"来实现。
-
在Vim中,可以使用":reg"来查看寄存器中目前的状态。
0x07 Vim中进行编辑:
-
在normal模式下,如果要删除某个字符,可以先使用光标选中某个字符,然后使用"x"键进行删除操作。
-
若要一次删除多个字符,则可以进入visual模式,然后选取要删除的内容,之后使用"x"或者"d"来进行删除动作。
-
若要删除光标位置到行末的所有内容,可以使用"d"+"$"来进行操作。或者直接使用"D"来进行操作。
-
若要删除光标位置到行首的所有内容,可以使用"d"+"0"来进行操作。
-
若要一次删除多行,则可以使用"数字"+"dd"来进行操作(数字代表行数)。
-
若要从某个位置直接删除到文末,则可以使用"d"+"G"来进行操作。
若要从某个位置直接删除到文首,则可以使用"d"+"gg"来进行操作。
-
使用"d"删除内容后,会停留在normal模式。但是如果使用"c"删除内容后,则可以直接进入到insert模式。
-
使用"D"删除到行末后,会停留在normal模式。但是如果使用"C"删除到行末后,则可以直接进入到insert模式。
注:以上所有的删除动作,vim都会将删除内容放置到48个寄存器中。可以使用":reg"来查看寄存器内容。
-
若要替换某个字符,可以先使用光标选中该字符,之后使用"r"确定要执行替换动作,最后在该位置输入想要的字符内容。
注:本操作只能针对单字符进行替换。
-
若要对文本内容进行缩进处理,可以先定义缩进宽度,通过命令"set shiftwidth=x"来进行定义,其中x代表字符数。如果x=2,则代表缩进宽度为2个字符宽度。
在normal模式下,使用">"可以使光标所在行,向右缩进1个shitfwidth宽度。
在normal模式下,使用"<"可以使光标所在行,向左缩进1个shitfwidth宽度。
-
也可以选取整行或多行,然后使用"数字"+">“或"数字”+"<"来进行缩进处理。其中数字代表要缩进多少个缩进宽度。
-
在某种特殊后缀名的源代码文件中,可以将指定行进行选取,然后使用"="。这样vim会基于该后缀名对应语言的通用习惯,自动对每行代码进行排版。
0x8 Vim中更多的选取和编辑方式:
-
在vim中可以通过"Ctrl+v"来进行块选取。
step1:确定要选取的块,将光标移动到首行行首。
step2:使用"Ctrl+v",进入到块选取模式,然后将光标移动到要选取的末行行首。
Step3:使用"$"键,将光标移动到要选取的末行行末。则完成块选取。
-
若要对多行进行注释,则需要在多行前面加#。则可以使用块选取。
step1:将光标停留在需要注释的多行中的第一行行首,然后使用"Ctrl+v"。使用方向键将光标向下移动选择要注释的行。
Step2:然后使用"I"键,进入输入模式。在前面输入"#"。
Step3:然后使用"Esc"或"Ctrl+["回到normal模式,则可以实现对多行一次性全部注释。
-
若要对某个较长单词(当然短的也可以)进行选择,可以先将光标移动到目标单词的任意一个字母上年,然后使用"v+i+w"或者"v+a+w"来进行操作(i是inner的缩写,a是around的缩写)。
使用"v+i+w"的选取,结果是选取整个单词的内容,但是不包括单词外侧的空格。使用"c+i+w",则会将"v+i+w"选取的内容删除并进入insert模式。
使用"v+a+w"的选取,结果是选取整个单词的内容,而且包括单词右侧的空格。使用"c+a+w",则会将"v+a+w"选取的内容删除并进入insert模式。
-
若要对被""包裹的内容进行选取,则可以使用v+i+"或者v+a+"进行操作。
注:由于下面所使用的组合键中会用到",因此组合键不在使用""包裹。
使用v+i+“的选取,结果是选取了被”“包裹的内容,但是不包括”"。使用c+i+",则会将v+i+"选取的内容删除并进入insert模式。
使用v+a+“的选取,结果是不仅选取了被”“包裹的内容,而且包括”"。使用c+a+",则会将v+a+"选取的内容删除并进入insert模式。
-
在html代码中,经常会遇到代码被标签包裹。在类似这种代码中,可以使用"v+i+t"或者"v+a+t"来进行选取操作(t是tag的缩写)。
使用"v+i+t"的选取,结果是选取了被标签包裹的内容,但是不包括标签。使用"c+i+t",则会将"vit"选取的内容删除并进入insert模式。
使用"v+a+t"的选取,结果是不仅选取了被标签包裹的内容,而且包括标签。使用"c+a+t",则会将"vat"选取的内容删除并进入insert模式。
-
在文档中,可以使用"v+}"来选取光标下面的一整段。可以使用"d+}"来删除光标下面的一整段。可以使用"c+}"来删除光标下面的一整段,并进入到insert模式。
在文档中,可以使用"v+{"来选取光标上面的一整段。可以使用"d+{"来删除光标上面的一整段。可以使用"c+{"来删除光上面的一整段,并进入到insert模式。
0x09 Vim的text object和小技巧:
-
基于曾经的内容,可以感觉到vim中的操作快捷键,其实是包括如下分类的:
名词:w=word, s=sentence, p=paragraph, t=tag, ‘’, “”, (), [], {}。
动词:y=yank,p=paste,d=delete,c=change。
范围:i=inner,a=a or around。
量词:就是数字。
-
选取一个单词,则可以将光标移至该单词上的任意一个字母位置,然后"v+i+w"。
若要选取多个单词,则可以将"v+i+w"中的"i"替换成数字(数字就是要选取的具体单词数目)。
当然动作"v"可以由动作"c"、动作"d"和"y"来替换。
-
选取一个句子,则可以将光标移至该句子上的任意一个字母位置,然后"v+i+s"。当然动作"v"可以由动作"c"、动作"d"和"y"来替换。
-
选取一个段落,则可以将光标移至该段落上的任意一个字母位置,然后"v+i+p"。当然动作"v"可以由动作"c"、动作"d"和"y"来替换。
-
回到本行行首可以使用"0",若要回到本行文首则可以使用"^"。
-
vim中默认不显示行号,可以使用":set number"来使每行行首显示行号。若要取消该操作可以使用":set nonumber"。
-
若要使光标直接跳转到指定行,则可以使用"数字+G"来实现(数字为行号)。
-
向下翻一页可以使用"Ctrl+f",向上翻一页可以使用"Ctrl+b"。
-
如果某一个段落不想看它,则可以将该段落选取,并使用"zf"来将其缩略成一行。被缩略的这行行首有个"+"号,可以使用"zd"将其展开。
注:可以将"zf"看做是一个动词。那么若想缩略某一个段落,可以将光标移动至该段落中,然后使用"zf+i+p"来进行操作。
-
若要实现大小写互换,则可以先对指定内容进行选取,然后使用"~"来进行操作。
-
可以使用"."来重复操作上一个动作。在对多行添加注释时,非常方便。
例如:如果要注释某行,可以进行如下操作:
Step1:将光标移动到要注释的那一行,然后使用"I",将光标移动到该行行首。
Step2:添加"#“注释该行,可以在”#"和文首中间增加一个空格。
Step3:然后将光标移动到其他要注释的行,直接按"."键,则可以对该行进行注释。
-
若要将多行合并成一行,可以使用"J"来进行操作。在本行点击"J",会将本行的下一行吸到本行行末。选取多行后点击"J",那么多行会自动排成一行。
-
在insert模式下,使用"Ctrl+w"可以向前删除一个单词。使用"Ctrl+u"可以向前删除到行首。
-
若要在vim中执行终端指令,则可以在vim中":!"后面空格再追加终端指令即可。
-
可以在vim中使用":r !"后面追加终端指令,则可以将终端输出结果贴入vim文本中。
-
在终端中键入vimtutor,则可以打开vim教程。
-
在vim中,使用":help"后面追加空格和相关内容,则可以进行帮助查询。
未完待续…