无人小站

Vim 的 s 与 x命令

JP-Liu Vim

Vim 的 s 与 xi/xa 命令的小差别

在Vim中的s命令是删除当前光标下的字符并在该字符位置进入插入模式,xi/xa两个命令则是在删除当前光标下的字符后进入插入模式。表面上看两者并没有什么不同:

其实,有一点是不同的,就是进入插入模式后光标的位置

如果光标后面没有文字(比如说在行尾),使用 xa 正常,但是使用 xi 就会位置向前移一个字符;同样的:

如果光标前面没有文字(也就是在行首),使用 xi 则正常,xa 在会向后移一个字符。

在 Virsual 模式下,s 与 d 也有类似的差别。

如果需要在原内容位置上添加内容,s 比 x 或者 d 要好用得多,如,要将当前所选的内容的左右两边加上两个星号(Markdown 的加粗):

vnoremap <silent> md "ms****<Esc>h"mPe

如果在这里使用 d 的话就要分两种情况,由于 Vim 默认是删除后光标靠原来右边一位,所以要分别考虑光标在行尾与不在行尾,用 s 的话就不存在这个问题。

JP-Liu
懒人一个