vim技巧补充
表 1. 用于移动光标的 Vim 命令
将光标向左移动 |
将光标向下移动 |
将光标向上移动 |
将光标向右移动 |
将光标移动到当前段落的末尾 |
将光标移动到当前段落的开头 |
将光标移动到当前句子的末尾 |
将光标移动到当前句子的开头 |
移动到当前行的第一个非空字符 |
移动到当前行末尾 |
移动到当前行开头 |
移动到下一单词的开头 |
移动到上一单词的开头 |
移动到下一单词的末尾 |
移动到屏幕的第一行 |
移动到屏幕的中间一行 |
移动到屏幕的最后一行 |
移动到文件末尾 |
移动到文件开头 |
移动到行n |
表 2 显示了用于删除文本的 Vim 命令。
表 2. 用于删除文本的 Vim 命令
删除选中的区域 |
删除整个当前行 |
删除从当前行开始的 10 行, |
从当前位置向前删除单词 |
从当前光标位置左边开始向后删除单词 |
删除当前光标位置的字符 |
删除当前光标位置左边的字符 |
删除当前光标位置到行开头之间的单词 |
删除从当前光标位置开始的整个行 |
删除光标当前位置的字符 |
删除光标当前位置之前的字符 |
表 3 提供了其他几个有用的 Vim 命令。
表 3. 常用 Vim 命令
进入插入模式并在当前光标处插入 |
进入插入模式并在当前行的开始处插入 |
进入插入模式并追加到光标后面 |
进入插入模式并追加到当前行末尾 |
更改选中的区域 |
更改从光标当前位置开始的整个行 |
在光标当前所在行下方创建一个新空行,并将光标移动到这一新空行的开头 |
在光标当前所在行的上方创建一个新空行,并将光标移动到这一新空行的开头 |
替换光标当前位置的单个字符 |
替换从光标当前位置开始的多个字符,并在退出插入模式时结束 |
退出插入或可视模式 |
向选中区域右边缩进 |
向选中区域左边缩进 |
启动时突出显示字符 |
启动时突出显示的整个行 |
将当前行移动/复制到内存 |
将从当前行开始的 10 行移动/复制到内存 |
粘贴复制或剪切的文本;如果字符被复制(yw dw 或D ),就在光标当前位置之后粘贴这些字符。如果复制的是行,就在光标当前所在的行下面粘贴这些行 |
作用和p 一样,但是它在光标当前位置的前面粘贴字符,在光标当前所在行上面粘贴行 |
撤消最后的更改 |
重做 |
搜索已找到的下一个模式,并将光标放在已找到的模式的开头 |
搜索已找到的上一个模式,并将光标放在已找到的模式的开头 |
重复上一次的搜索 |
重复上一次的搜索,但搜索的方向相反 |
在 Vim 会话外执行<cmd> |
|
行模式
尽管广泛使用的是命令和插入模式,但行模式同样重要,只是有时候没有被充分理解和使用。行模式进入行编辑器,使您可以在一行或多行上处理命令。考虑到 vi 以 ex 编辑器命名,所以它只适合进入 ex 编辑器的行模式。
要从命令模式进入行模式,输入冒号(<strong>:</strong>
)即可。然后将光标移动到窗口左下角。继续输入时,所有文本都会出现在窗口底部的冒号后面。单击Enter,开始计算和执行行模式命令。如果确定不执行在行模式下输入的行,则单击Escape返回到命令模式。
使用编辑器的行模式时,请记住两种命令样式。首先,在输入命令时,vi 或 Vim 按原样执行命令。如果执行的命令与修改数据有关,当前行就是目标。但是,使用第二种方法可以提供行数以处理指定的行。要输入行,请在冒号后面输入要处理的行数或行范围,并用逗号(,
)分隔开始和结束范围。
例如,如果只处理行 23,那么命令以<strong>:23</strong>
开始。如果要修改 2319 到 3819 之间的行,则输入<strong>:2319,3819</strong>
。要处理从行 45 开始到文件结尾之间的一个命令,需要将最后行的参数替换为美元符号(<strong>$</strong>
)— 即<strong>:45,$</strong>
。
以下命令只是可以在行模式下执行的最基本命令:
:w <file name>
:将文件写入磁盘。如果提供一个参数,编辑器会试图将数据写入 <file name>。注意:如果提供一个参数,而且存在 <file name>,编辑器不会覆盖现有文件的数据。
:w! <file name>
:将文件写入磁盘并覆盖文件中的所有数据。:<x>,<y> w <file name>
:将从 <x> 到 <y> 之间的行写入 <file name>。:q
:试图在不保存的情况下退出编辑器。注意:如果数据已修改,则需要先保存文件再退出编辑器,否则将导致文件未被保存。
:q!
:退出编辑器,不将文件写入磁盘。:n
:如果编辑多个文件,首先编辑编辑列表中的下一个文件。:e <file name>
:编辑 <file name>。:e#
:如果编辑两个文件,则在两个文件之间切换。:s/<str1>/<str2>/
:用当前行中的 <str2> 替换第一次出现的 <str1>。:1,$ s/<str1>/<str2>/g
:从行 1 开始,在整个文件中执行,用 <str2> 替换所有的 <str1>。:r <file name>
:将 <file name> 读入当前编辑器会话中。:<x>,<y> d
:删除从 <x> 到 <y> 之间的行。:<x>,<y> y
:复制从 <x> 到 <y> 之间的行。
Vim多行缩进技巧
通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。
在WORD间移动
除了word之外,Vim还有一种概念WORD。虽然这只是大小写的不同,但是他们却代表了两种不同的事物。word是指由iskeyword选项定义的字符串;而WORD则是指用空白符分隔的字符串。与WORD相关的一些命令如下:
[count]B | 向后移动count个WORDS |
[count]E | 向前移动count个WORDS,并且将光标置于WORD的末尾. |
[count]gE | 向后移动count个WORDS,并且将光标置于WORD的末尾. |
[count]W | 向前移动count个OWRDS. |
w | 向前移动一个word |
e | |
b | 向后移动一个word |
set iskeyword | 定义word选项 |
w | 向前移动一个WORD |
e | |
b | 向后移动一个WORD |
非正常关闭vi编辑器时会生成一个.swp文件
swp文件的来历,当你强行关闭vi时,比如电源突然断掉或者你使用了Ctrl+ZZ,vi自动生成一个.swp文件,下次你再编辑时,就会出现一些提示。
你可以使用
vi -r {your file name}
来恢复文件,然后用下面的命令删除swp文件,不然每一次编辑时总是有这个提示。
rm .{your file name}.swp
在网上搜到了一个类似的提示,不同的linux提示可能不一样
“.xorg.conf.swp” already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit:
当然可以用R键恢复。
vi编辑器要正常退出可以使用Shift-ZZ 。
如果不想每次vi崩溃时不保存swp文件,可以修改文件,
表 1. 用于移动光标的 Vim 命令
将光标向左移动 |
将光标向下移动 |
将光标向上移动 |
将光标向右移动 |
将光标移动到当前段落的末尾 |
将光标移动到当前段落的开头 |
将光标移动到当前句子的末尾 |
将光标移动到当前句子的开头 |
移动到当前行的第一个非空字符 |
移动到当前行末尾 |
移动到当前行开头 |
移动到下一单词的开头 |
移动到上一单词的开头 |
移动到下一单词的末尾 |
移动到屏幕的第一行 |
移动到屏幕的中间一行 |
移动到屏幕的最后一行 |
移动到文件末尾 |
移动到文件开头 |
移动到行n |
表 2 显示了用于删除文本的 Vim 命令。
表 2. 用于删除文本的 Vim 命令
删除选中的区域 |
删除整个当前行 |
删除从当前行开始的 10 行, |
从当前位置向前删除单词 |
从当前光标位置左边开始向后删除单词 |
删除当前光标位置的字符 |
删除当前光标位置左边的字符 |
删除当前光标位置到行开头之间的单词 |
删除从当前光标位置开始的整个行 |
删除光标当前位置的字符 |
删除光标当前位置之前的字符 |
表 3 提供了其他几个有用的 Vim 命令。
表 3. 常用 Vim 命令
进入插入模式并在当前光标处插入 |
进入插入模式并在当前行的开始处插入 |
进入插入模式并追加到光标后面 |
进入插入模式并追加到当前行末尾 |
更改选中的区域 |
更改从光标当前位置开始的整个行 |
在光标当前所在行下方创建一个新空行,并将光标移动到这一新空行的开头 |
在光标当前所在行的上方创建一个新空行,并将光标移动到这一新空行的开头 |
替换光标当前位置的单个字符 |
替换从光标当前位置开始的多个字符,并在退出插入模式时结束 |
退出插入或可视模式 |
向选中区域右边缩进 |
向选中区域左边缩进 |
启动时突出显示字符 |
启动时突出显示的整个行 |
将当前行移动/复制到内存 |
将从当前行开始的 10 行移动/复制到内存 |
粘贴复制或剪切的文本;如果字符被复制(yw dw 或D ),就在光标当前位置之后粘贴这些字符。如果复制的是行,就在光标当前所在的行下面粘贴这些行 |
作用和p 一样,但是它在光标当前位置的前面粘贴字符,在光标当前所在行上面粘贴行 |
撤消最后的更改 |
重做 |
搜索已找到的下一个模式,并将光标放在已找到的模式的开头 |
搜索已找到的上一个模式,并将光标放在已找到的模式的开头 |
重复上一次的搜索 |
重复上一次的搜索,但搜索的方向相反 |
在 Vim 会话外执行<cmd> |
|
行模式
尽管广泛使用的是命令和插入模式,但行模式同样重要,只是有时候没有被充分理解和使用。行模式进入行编辑器,使您可以在一行或多行上处理命令。考虑到 vi 以 ex 编辑器命名,所以它只适合进入 ex 编辑器的行模式。
要从命令模式进入行模式,输入冒号(<strong>:</strong>
)即可。然后将光标移动到窗口左下角。继续输入时,所有文本都会出现在窗口底部的冒号后面。单击Enter,开始计算和执行行模式命令。如果确定不执行在行模式下输入的行,则单击Escape返回到命令模式。
使用编辑器的行模式时,请记住两种命令样式。首先,在输入命令时,vi 或 Vim 按原样执行命令。如果执行的命令与修改数据有关,当前行就是目标。但是,使用第二种方法可以提供行数以处理指定的行。要输入行,请在冒号后面输入要处理的行数或行范围,并用逗号(,
)分隔开始和结束范围。
例如,如果只处理行 23,那么命令以<strong>:23</strong>
开始。如果要修改 2319 到 3819 之间的行,则输入<strong>:2319,3819</strong>
。要处理从行 45 开始到文件结尾之间的一个命令,需要将最后行的参数替换为美元符号(<strong>$</strong>
)— 即<strong>:45,$</strong>
。
以下命令只是可以在行模式下执行的最基本命令:
:w <file name>
:将文件写入磁盘。如果提供一个参数,编辑器会试图将数据写入 <file name>。注意:如果提供一个参数,而且存在 <file name>,编辑器不会覆盖现有文件的数据。
:w! <file name>
:将文件写入磁盘并覆盖文件中的所有数据。:<x>,<y> w <file name>
:将从 <x> 到 <y> 之间的行写入 <file name>。:q
:试图在不保存的情况下退出编辑器。注意:如果数据已修改,则需要先保存文件再退出编辑器,否则将导致文件未被保存。
:q!
:退出编辑器,不将文件写入磁盘。:n
:如果编辑多个文件,首先编辑编辑列表中的下一个文件。:e <file name>
:编辑 <file name>。:e#
:如果编辑两个文件,则在两个文件之间切换。:s/<str1>/<str2>/
:用当前行中的 <str2> 替换第一次出现的 <str1>。:1,$ s/<str1>/<str2>/g
:从行 1 开始,在整个文件中执行,用 <str2> 替换所有的 <str1>。:r <file name>
:将 <file name> 读入当前编辑器会话中。:<x>,<y> d
:删除从 <x> 到 <y> 之间的行。:<x>,<y> y
:复制从 <x> 到 <y> 之间的行。
Vim多行缩进技巧
通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。
在WORD间移动
除了word之外,Vim还有一种概念WORD。虽然这只是大小写的不同,但是他们却代表了两种不同的事物。word是指由iskeyword选项定义的字符串;而WORD则是指用空白符分隔的字符串。与WORD相关的一些命令如下:
[count]B | 向后移动count个WORDS |
[count]E | 向前移动count个WORDS,并且将光标置于WORD的末尾. |
[count]gE | 向后移动count个WORDS,并且将光标置于WORD的末尾. |
[count]W | 向前移动count个OWRDS. |
w | 向前移动一个word |
e | |
b | 向后移动一个word |
set iskeyword | 定义word选项 |
w | 向前移动一个WORD |
e | |
b | 向后移动一个WORD |
非正常关闭vi编辑器时会生成一个.swp文件
swp文件的来历,当你强行关闭vi时,比如电源突然断掉或者你使用了Ctrl+ZZ,vi自动生成一个.swp文件,下次你再编辑时,就会出现一些提示。
你可以使用
vi -r {your file name}
来恢复文件,然后用下面的命令删除swp文件,不然每一次编辑时总是有这个提示。
rm .{your file name}.swp
在网上搜到了一个类似的提示,不同的linux提示可能不一样
“.xorg.conf.swp” already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit:
当然可以用R键恢复。
vi编辑器要正常退出可以使用Shift-ZZ 。
如果不想每次vi崩溃时不保存swp文件,可以修改文件,