Vi Keyboard Shortcuts

移动

  • hjkl对应左、下、上、右。
  • 0移动到行首,$移动到行尾。
  • w向前移动一个单词,W向前移动一个单词但不包括标点符号。
  • b按单词后移,B按单词后移但不包括标点符号。
  • ^F向前滚动一屏,^B向后滚动一屏,^D向前滚动半屏(下),^U向后滚动半屏(上)。
  • +到下一行的首字符,-到上一行的首字符。
  • z回车把当前行移动到屏幕顶部并滚动,z.把当前行移动到屏幕中央并滚动,z-把当前行移动到屏幕底部并滚动。
  • ^L刷新屏幕。
  • H移动到起始点——屏幕首行,M移动到屏幕的中间行,L移动到屏幕的末行,nH移动到屏幕首行下面的地n行。
  • ^移动到当前行的第一个非空格的字符。
  • n|移动到当前行的第n列。
  • (移动到当前句子的开始,)移动到下一句子的开始,{移动到当前段落的开始,}移动到下一段落的开始。
  • [[移动到当前节的开始,]]移动到下一节的开始。
  • n同向重复搜索,N反向重复搜索,/回车向前重复搜索,?回车向后重复搜索。
  • fx在行内搜索(光标移动到)x的下一个实例,Fx在行内搜索(光标移动到)x的上一个实例,tx在行内搜索(光标移动到)x的下一个实例前面的字符,Tx在行内搜索(光标移动到)x的上一个实例后面的字符,;同方向重复前面的搜索命令,,反方向重复前面的搜索命令。
  • nG移动到文件的第n行,G移动到文件的尾部,^G显示当前行的位置,``返回到以前的标记或上下文,‘’ 返回到包含以前标记的行的开始。
  • 组合命令只要满足通用命令格式(数字)(命令)(文本目标)即可
  • 'x(单引号)移动光标到x所标记的行的首字符。
  • `x(反引号)移动光标到x锁标记的字符。

修改文本

  • i在光标前插入文本,I在行首长入文本;a在光标后追加文本,A在行尾追加文本。
  • o在光标所在行的下面新建一行,等待输入新文本,O在光标所在行的上面新建一行,等待输入新文本。
  • c替换选中区域文本,一般与移动命令组合,例如组合cw到单词的尾部,c2b后退两个单词,c$到行尾,c0倒行首。cc专门用来替换整个当前行。C用来替换从当前光标位置到行尾的所有字符(c$)。
  • r用以替换单个字符,s类似于c但只替换单个字符,使用计数也可以替换多个字符,R使用新文本覆盖现有文本。
  • ~用于大小写转换。
  • d命令用于删除,也可以组合移动命令,例如dw删除到本行中下一个单词前(包括空格),而de之删除道当前的单词的词尾(dE则可以删除到词尾包括标点符号),db向后删除或者删除到行首d0d$dd用于删除当前整行,可用计数2dd删除两行。D命令用来删除从光标位置到行尾的文本。
  • x之删除一两个字符。
  • p粘贴命令把位于缓冲区的文本粘贴到光标位置的后面。大写版本P则把这些文本粘贴到光标的前面。如果删除了一行或多行,那么p将把已删除的文本粘贴到光标下面的新行中。如果删除的内容不到一整行,那么p将把已删除的文本粘贴到当前行中的光标后面。
  • xp组合使用xp可以实现调换两个字母的顺序。
  • y复制文本,与修改和删除命令一样,复制命令也可以与任何移动命令和计数结合在一起使用(ywy$4yy)。类似于ddccyy也做用于一整行,但Y只是和yy功能一样。
  • .句点用以重复命令。
  • u用以撤消一部编辑,对应的U则撤消所有对单行进行的所有编辑。
  • J用于合并两行。

其他操作

  • 从缓冲区输出文本pP
  • ZZ保存编辑推出文件。
  • :x只有在修改文件后才能执行退出命令,:wq则无条件进行。
  • vi +n file打开文件到第n行。
  • vi + file打开文件到最后一行。
  • vi + /pattern file打开文件到模式首次出现的地方。
  • vi -c command file打开文件后运行命令,通常是行号或者搜索。
  • vi -R以只读的方式进行。
  • vi -r系统崩溃后恢复文件。
  • mxxx 可以为任何字符)标记当前位置。

缓冲区

  • vi -r恢复缓冲区的文件,用于系统崩溃后的恢复。
  • "双引号用于缓冲区的操作,如"2p将二号缓冲区中的删除内容粘贴到光标后面,例如"dyy复制当前行到d缓冲区中,"a7yy复制接下来的7行到a缓冲区中,"dp粘贴d缓冲区中的内容到光标前,"ap粘贴a缓冲区中的内容到光标后。
  • "1pu.u.u etc.这样就会一次吧所有缓冲中的内容粘贴到文件中。没输入一次u,恢复的文本就会被删除;当输入.时,下一个缓冲区的内容就会恢复到文件中,一直输入u.直到恢复了在寻找的文本为止。
  • 1-9前9次删除操作,由最近到最早的。
  • a-z需要时使用的命名缓冲区,大写字母表示添加到改缓冲区区尾。

ex命令相关

此段引用vim的ex模式介绍
  • 使用ex filename打开文件;这时候你看不到文件的内容,只能看到该文件的行数还有冒号提示符。
  • ex命令由一个行号和一个命令组成,比如1p1是行号,p是print命令,事实上,p是默认的,当只有行号的时候,也能打印东西出来,就是行号所表示的行。1,3表示打印从第一行到第三行,没有行号的时候,则表示操作的是当前行。
  • 在vi里面调用ex命令,需要进入命令模式,在底下输入冒号,然后enter键,vi底层是用了ex编辑器。
  • 几个命令:
命令 缩写 功能
delete d 删除行
move bar 移动行
copy c or t 复制行
  • 对于ex来说,行尤为重要,在编辑的时候,你可以用.来表示当前行,$来表示最后一行,而%最代表每一行,使用%的话,相当于1,$,这些东西能和显式的行号搭配使用。比如:3,18d删除3到18行的内容,:150,180m23,把150到180这个块移动到23行后面,:23,38co100把前面的部分拷贝到100行后面,需要行号显示的时候:set nu这个命令会对你帮助甚大,:d删除所有的行,:%t$拷贝所有行然后放到末尾,:20,.m$把20到当前行移动到文件尾,ps:vi里面trl+G显示当前行,在ex里,你可以用:.=得到相同的结果 ,也可以用:=得到文件的总行数,使用:/pattern/=则打印出模式出现的第一次的行数。
  • 相对行号的设置,+号和-号放在数字中间的时候,用来表示数字范围,例如::.,.+20当前行到当前行后的20行,:226,$m.-2把226行到结束间的内容移动到当前行前的两行。事实上,当你使用相对行号的时候,当前位置甚至不需要你输入.,默认位置就是从当前位置算起的。
  • 搜索寻址的方式,例如::/pattern/d删除模式后面一行,:/pattern/+d删除模式后面一行的下一行,:/pattern1/,/pattern2/d删除模式1第一行到包括模式2的第一行。
  • 有时候可能你迷糊了一下,觉得这样就能删掉100行以后的5行::100,+5 d事实上却告诉你这样一般来说是不行的,因为相对行默认是以当前行为起点的,所以你这个命令的执行结果有赖于你当前行的位置。这时候ex提供了一个让你延续这种习惯的语法:100;+5 d,把中间的逗号换成分号,你就可以以前操作数作为相对位置的起点了。
  • g代表全局范围,:g/pattern在全局找pattern出现的最后位置,:g/pattern/p找到包含模式的所有行,:g!/pattern/p找到所有不包含模式的行。
  • 使用|能够在一行执行多个ex命令,例如:1,3d | s/thier/their/会把第一行到第三行删除(保留文件中的顶行),然后在当前行(该行是调用ex提示符以前的第4行)进行替换。1,5m | g/pattern/nu会把第一行到第五行移动到第十行后面,然后显示所有包含模式pattern的行(和行号)。
  • :160,224ya a将第160到224行的内容复制a缓冲区中,使用:e letter然后:pu a实现打开letter文件并从缓冲区a中复制。
  • :r filename把filename的内容插入到光标所在位置的下一行,:185r filename内容插入到185行之后。:/pattern/r filename将filename的内容插入到当前文件第一次出现pattern的行之后。
  • :w %.new等同于:w filename.new,将当前缓冲区的内容写到目标文件吗中,因为%表示当前的文件名。

你可能感兴趣的:(Vi Keyboard Shortcuts)