Vim分割行命令

98

不,我真的是在寻找是否有一些基本命令我可能忽略或无法找到,这里可能有其他人知道。 - dburke
7个回答

187

rEnter 在空白处按下即可完成操作。这只需要两个按键。


13
差强人意,但还差一点。我经常想在两个相邻的HTML标签之间切割,而它们之间没有空格。 - dburke
3
在这种情况下,在您的.vimrc中放置s映射(http://vim.wikia.com/wiki/Insert_a_single_character),然后使用`<s> <Enter>`。 - Kyle Strand
i Enter 将在两个相邻的 HTML 标签之间不留空格地分割行。@dburke - dcx86

40

我不认为有一个单一的快捷键可以完成这个功能。使用默认的Vim,你可以尝试使用iEnterEsc


1
"<Esc>i<Enter><Esc>" 可能更好 - jperelli
100
更好:r<回车>。 - Andy Stewart
21
失去一个字符,如果是空格就很好。 - trusktr
4
“@AndyStewart r<cr> 很糟糕,因为它可能会丢失一个字符。我不知道为什么那个回答获得了50多个赞。被接受的答案是唯一正确的答案。您也可以根据需要在某些内容之后或之前使用a<cr><esc>来换行。” - Clever Programmer
12
r<cr> 是很好的,因为它与 J 相反,它会删除空格。 - ischeriad

36

我的解决方案是重新映射K键,因为我从不使用默认操作(使用“man”查找光标下的单词),而我的先前编辑器使用Alt+j和Alt+k来连接和拆分行。

:nnoremap K i<CR><Esc>

这将三个烦人的按键合并为一个。

可能有一种更高级的方法也可以消除任何尾随空格,但我更喜欢在写入时删除所有尾随空格。


4
太好了!通常我不小心按下“K”键会造成灾难,因为该键会打开愚蠢的“man”页面功能,但现在我可以用实际有用的东西来替换它了。 - Explosion Pills
3
这是一个不错的重新定义,但 K 的默认行为不应仅被视为严格的“man”(Unix 命令手册)。许多插件会将 K 重新定义为查找当前语言环境下的文档。例如,在 PHP 中,K 会带我到 php.net 的文档... - mike3996

23

不行,我已经读了足够的答案来得出结论:没有这样的命令。

简单的答案是:在插入模式下按“Enter”键;但你说得对,在命令模式下应该有一个键可以做到。我也一直在想。

由于每个人都有自己喜欢的解决方法,我将分享我的解决方法。假设我会任何事情来避免按Esc键。

ylprX...其中“X”是插入的字符,甚至可以是换行符

所以,“yl”是向右拷贝一个字符,“p”=粘贴字符,“r”是替换该字符;然后你只需输入新字符。就是我有多讨厌使用Escape。

(顺便说一下,“l”表示“向右移动”)


14
我要去提交一个功能请求。谁跟我一起来?! - dburke
3
再次“改进”vi?(大笑)。 我猜如果每个人都想要它而且它不存在,那一定有原因。我真正想要的是一个“插入n个字符”的命令,它不进入“插入模式”。 - gbarry
5
推荐:http://stackoverflow.com/questions/397229/reaching-up-to-hit-the-escape-key - dreeves
谢谢!点赞就要来了! - gbarry
8
@gbarry 哇 - 你有没有考虑将CapsLock重新映射为Esc功能? - willoller
显示剩余3条评论

12

虽然这是一个旧的线程,但我不使用“K”进行手册查找或任何它所做的魔术。因此,我在我的.vimrc文件中有这个映射:

map K i<Enter><Esc>

我想既然“J”代表联接(join),那么“K”可以表示破解(krack)或其他什么东西。 :)


我将<CR>键映射为<Esc>键,所以对我来说这是最好的答案 :) - Christian Rondeau
1
or just: kut (as cut) ^_^ - JavaRunner

10

如果您可以创建一个正则表达式来确定拆分位置,那么您可以拆分行。例如,如果您想在每个分号处拆分行,则可以使用以下替换:

%s/;/^v^m/g

效果非常好。


0
Jed的回答非常有用。我想补充一下,我需要“控制-V-替代”,即控制-Q: %s/;/^q^m/g


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接