有时在插入模式下,我误打了<CR>,我不得不多次按退格键(取决于缩进)才能回到原来的位置。

例如

<div>
  <p> This is some text []</p>
</div>


光标是[],我按了<CR>

<div>
  <p> This is some text 
  []</p>
</div>


现在我必须按两次退格键回到上一行(这种情况还不错,但缩进量不大)。

您知道更好的方法吗?

评论

Ctrl + w两次似乎可以正常工作并且很容易

#1 楼

怎么样:

inoremap <C-\> <C-o>:left 0<Cr><BS>


<C-o>将执行普通模式命令(:left 0),该命令将删除所有缩进,这还将把光标放在行首。 <BS>将带您回到最后一行。

这有点像“向后J”。

不幸的是,映射Shift + Enter或Ctrl + Enter并没有似乎有可能,所以我选择<C-\>,因为它位于“ enter enter”附近。

评论


“输入附近”取决于您的键盘:英国的键盘在左移旁边有``:-)

– TripeHound
15年7月7日在15:58

为什么不使用代替:left 0

–詹姆斯
2015年9月1日下午16:14

@jamessan用作“向后J”:因此foo bar 将使您离开foobar。恕我直言,它更有用,但是YMMV。

–马丁·图尔诺伊(Martin Tournoij)
2015年9月1日于17:09

是的,但我要说的是(即i_CTRL-U)应该与相同:left 0

–詹姆斯
2015年9月1日于17:13

@jamessan好吧,这取决于光标的位置。键入foo bar 将留下foo (+ Vim可能添加的任何自动缩进)。 :left 0 的行为始终相同,无论光标处于什么位置。

–马丁·图尔诺伊(Martin Tournoij)
2015年9月1日17:32



#2 楼

我在vimrc中有此内容,第二部分与此相关: ,开始新的更改”(请参阅​​Enter)。这意味着,如果您误按了h: i_CTRL-G_u,则现在可以撤消更改而无需删除先前插入的行,无论是使用Enter还是使用Statox提议的ESC u a。基本上,每一行都可以单独撤消。具有类似的效果。

评论


现在我很好奇第一部分以及与弹出菜单的关系。

– 8bittree
15年7月7日在13:16

请参阅以下答案:vi.stackexchange.com/a/3844/1800。在插入模式下,按Ctrl-y将完成当前的弹出选择,并且上面的映射也将使Enter也能完成。

– VanLaser
15年7月7日在13:19

好招但是,我可能会用&paste替换最后一部分“ u ”? “ ”:“ u ”,否则下次您错误地粘贴200行HTML时,将其撤消将会很有乐趣。 :)

–lcd047
15年7月7日在14:51

...和说明:粘贴时,禁用插入模式映射(根据Vim的帮助)

– VanLaser
15年7月31日在18:34

我更喜欢此解决方案,因为依赖于Backspace选项的设置方式,依赖于Backspace,Ctrl-W和Ctrl-U的其他解决方案可能无法工作。

– doubleDown
2015年11月1日在10:50

#3 楼

我这样做的方式是Ctrl-wBackspace。

Ctrl-w删除最后一个单词(我忘记了这是否是标准的vim),因为它只是空格,所以将我带回到行的开头。然后,Backspace将带我回到上一行。

评论


亲爱的,我不知道插入模式下的Ctrl-wuse。但是“地毯吸烟者”♦仍然要快一些。因此,默认绑定Ctrl- \似乎没什么用。

– nobe4
15年7月8日在7:44



Ctrl + w是“标准Vim” ;-)参见::help i_CTRL-W。而且按两次似乎也可以解决问题?

–马丁·图尔诺伊(Martin Tournoij)
15年7月8日在7:44



我刚刚在帮助页面上看到可能会更有用,因为它会删除新行中的所有字符

– nobe4
15年7月8日在7:46

#4 楼

我的解决方法是(从插入模式)UpCtrl-oJDel。可能不是最有效的组合,但这是我正在做的而无需考虑它。

评论


另请参见:如何在不产生空格的情况下连接线?

–马丁·图尔诺伊(Martin Tournoij)
15年7月7日在11:49