在vim的插入模式下,使用'C-t'和'C-d'可以在当前行的开头插入或删除Tab/4个空格。而使用'C-i'可以在当前光标处插入Tab/4个空格。
但是,我们如何删除当前光标处的4个空格?'C-i'的反向操作是什么?
但是,我们如何删除当前光标处的4个空格?'C-i'的反向操作是什么?
没有内置的命令可以完成您想要的操作。
手动完成类似操作的一种方法如下:
<C-c>ciw
<C-c>
按键用于退出插入模式,不会触发自动命令,将光标停留在最后一个<Space>
上。ciw
命令可以剪切Vim视为“单词”的一系列<Spaces>
,并进入插入模式。现在有了一个可用的宏,将其映射到方便的快捷键也很容易:
inoremap <key> <C-c>ciw
我们可以通过防止它向寄存器中添加无用的
,使其变得更好:
inoremap <key> <C-c>"_ciw
<Tab>
和/或<Space>
序列同样适用。
<C-i>
,因为它删除光标前的所有连续空白,而不管制表符。<C-i>
,那么该映射将有效地作为反向<C-i>
,但如果您有超过&shiftwidth
<Space>
的长度,则整个序列都将被删除,这不是真正的反向<C-i>
所应该做的。<C-i>
将删除<Space>
直到前一个制表符,这听起来有点不太平凡。在这里,我的建议是使用:
function! BAT()
while getline(".")[col(".")-2] =~ "\\s"
normal X
if virtcol(".")%&tabstop == 1
break
endif
endwhile
endfunction
imap <S-Tab> <C-O>:call BAT()<CR>
你可以使用<C-o>4dh
(或者如果你更喜欢箭头,可以使用<C-o>4d<Left>
)来删除当前插入位置左侧的4个字符。
注意:<C-o>
允许你在插入模式下临时使用普通模式命令。
<C-I>
是<Tab>
。如果你也有setl expandtab
,那么Vim会将新输入的制表符扩展为空格。除了u
或类似操作之外,不应该有任何“反向操作”。 - Matt#define xxx 1
#define xxxxx 2
的代码时,我们总是需要对齐数字 1 和 2,制表符可以很容易地做到这一点。但是,如果我们多按了一次Tab键,那么我们就需要执行很多操作来删除这些多余的空格。这就是为什么我正在寻找一个反向操作的快捷键的原因。 - Jianfeng Wang