是否可以在光标未进入插入模式的情况下在Vim中插入换行符?这是一个示例([x]
表示光标位于x
):
if (some_condition) {[ ]return; }
有时,我可能想输入更多代码。因此,我按i进入插入模式,按Enter插入换行符,然后删除多余的空间。接下来,我将进入普通模式并将光标置于右大括号之前,然后执行相同的操作以使其完全独立。
我已经做了一段时间了,但是肯定有更好的方法吗?
是否可以在光标未进入插入模式的情况下在Vim中插入换行符?这是一个示例([x]
表示光标位于x
):
if (some_condition) {[ ]return; }
有时,我可能想输入更多代码。因此,我按i进入插入模式,按Enter插入换行符,然后删除多余的空间。接下来,我将进入普通模式并将光标置于右大括号之前,然后执行相同的操作以使其完全独立。
我已经做了一段时间了,但是肯定有更好的方法吗?
Answers:
对于您给出的示例,您可以使用rEnterEnter键替换单个字符(空格)。然后,fspace.前进到下一个空间并重复上一个命令。
根据您的自动缩进设置,以上内容可能会也可能不会正确缩进return语句。如果不是,请改用sEnterTabEsc换行符代替空格,缩进该行,然后退出插入模式。您将不得不用不同的命令替换第二个空格,以便不能使用'。'。在这种情况下。
>>
和<<
帮助缩进s
。
以下是创建一个宏的方法,该宏在未处于插入模式时每按一次'g'都会在光标处插入换行符:
在vim中,键入:
:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter]
哪里:
在您按下vim窗口的底部之前,您将看到以下内容,直到您按最终的Enter键:
:map g i^M^[
说明:
[Ctrl + V]的意思是“引用以下字符”-允许您在命令中嵌入换行符和转义字符。
因此,您要将'g'键映射到序列:
i [输入] [转义]
这是vim,用于在光标之前插入换行符,然后退出insert模式。
调整:
f}i^M^[O
-这将˚F IND的}和我nsert另一个新行,然后在插入模式和逃生Ø笔的空行,让您输入更多的代码。请享用!
如果通常将一个行块扩展为三行,请尝试替换。将左括号更改为括号/折线,将右括号更改为折线/括号。
用方括号/ return代替方括号的命令如下所示:
:s/{/{\r/
由于您想经常使用它,因此可以将整个序列映射到未使用的击键,如下所示:
:map <F7> :s/{/{\r/ ^M :s/}/\r}/ ^M
在序列中看到^ M的地方,键入[Ctrl-V],然后按Enter键。
现在,将光标放在采样线上的任意位置,按映射键,然后添加回车符。
检查:help map-which-keys
有关选择未使用的按键以进行映射的建议。
g
未映射,因为它用作许多由两次击键组成的vim映射的“名称空间”键(请参阅参考资料:h g
)。因此,此映射实际上是不可行的。
g
被用作“命名空间”键的命令?
:help g
是查看默认列表g
+某些映射的一种方法。z
,[
]
是其他“命名空间”键,请参见例如:help index
。您可以调用:verbose map g
以查看以g开头的所有当前定义的映射。有用webresources是viemu.com/vi-vim-cheat-sheet.gif,vimcasts.org/blog/2014/02/follow-my-leader,vimeo.com/85343734(幻灯片:speakerdeck.com/nelstrom/follow-my -leader)
如果在autoindent
启用(或任何其他缩进辅助功能)的同时将行换成两行,Vim会自动杀死光标右边的任何空格。
如果你不希望使用任何这些设置,使用s
,而不是i
为了小号ubstitute为空白的新文本,而不是仅仅插入。(如果有多个空格,请将光标放在最左侧,然后cw
改用。)
基本上,当您分割一行时,您只想插入回车符,或者如果您在空格中,则用回车符替换。好吧,为什么要选择一个或另一个呢?这是我对K的映射:
"Have K split lines the way J joins lines
nnoremap <expr>K getline('.')[col('.')-1]==' ' ? "r<CR>" : "i<CR><Esc>"
我使用三元运算符将这两个动作压缩为一个键映射。分解它,<expr>
意味着键映射的输出可以动态变化,在这种情况下,取决于条件getline('.')[col('.')-1]==' '
,这是询问vim光标下的字符是否为空格的漫长方式。最后,熟悉的三元运算符? :
要么用换行符(r<CR>
)替换空格,要么插入新的(i<CR><Esc>
)
现在,您已经有了一个可爱的姐妹键映射到J
命令。
在Vrapper中,您可以使用gql来分割行而不进入插入模式,但可能并不总是保持缩进。
我发现这是我所期望的相反行为的最忠实的实现 J
nnoremap S i<cr><esc>^mwgk:silent! s/\v +$//<cr>:noh<cr>`w
它在光标处进行了简单化的新行,如果存在任何空白,则照顾前一行中的任何尾随空格,然后将光标返回到正确的位置。
i <cr> <esc> -这是建议的最常见的解决方案之一,它不会删除光标下的非空格字符,但也会留下尾随空格
^mw -转到新行的开头并在下面创建标记 w
gk -上一行
:silent! s/\v +$//<cr> -正则表达式替换行尾的任何空格
:noh<cr> -清除所有突出显示正则表达式可能已打开的搜索
`w -归还商标 w
本质上结合了两者的r<esc><cr>和i<cr><esc>
注意:我有S一个可能会覆盖一个有用键的约束,但这是它的同义词cc,由于我不像拆分时那样频繁使用它,因此可以覆盖它。