我刚刚发现如何让vim自动创建匹配的大括号:
inoremap { {}<Esc>ha
inoremap ( ()<Esc>ha
inoremap [ []<Esc>ha
inoremap " ""<Esc>ha
inoremap ' ''<Esc>ha
inoremap ` ``<Esc>ha
现在我想知道是否有一种方法可以在删除其中一个时自动删除匹配的大括号 使用 autobrace 插件会很容易,但我不想安装支撑插件 也许有一个可以自动删除的工具,或者有一种方法可以在没有pugins的情况下做到这一点?
期待您的建议
读完你的问题后,我的想法有两个:
我将选择第二个选项,但我们可以借此机会简化您当前的映射:
inoremap { {}<Esc>ha
通过删除不必要的模式切换:
inoremap { {}<Left>
那里,干净多了。
现在,以下正常模式映射应该可以让您接近您想要的位置:
nnoremap <key> va}o<C-c>m'gvo<C-c>"_x``"_x
va}
,o
,<C-c>
,m'
,gv
,o
,<C-c>
,"_x
,``
,"_x
将开口括号切割至黑洞对准。请参阅
:help a}
、:help
v_o,
:帮助 v_ctrl-c,
:帮助 m',
:帮助 gv,
:帮助 x, and
:帮助寄存器`。
由于
[{()}]
,视觉模式舞蹈对于:help %
来说并不是绝对必要的,但它绝对是为了"'`
。
有一些以
d
开头的可用组合:
dc dm dq dr ds du dx dy dz
所以选择你的毒药。假设您选择
dx
“领导者”,您最终应该得到以下结果:
nnoremap dx{ va}o<C-c>m'gvo<C-c>"_x``"_x
" etc.
请注意,文本对象
a{
作为几个同义词,a}
和 aB
,因此您可能也想覆盖它们:
nnoremap dx{ va}o<C-c>m'gvo<C-c>"_x``"_x
nmap dx} dx{
nmap dxB dx{
" etc.
这也适用于
a(
。请注意非递归和递归映射的巧妙使用。
由于其中很多内容相当重复,您可能会考虑为重复部分创建一个“插头”映射:
xnoremap <Plug>(RemovePair) o<C-c>m'gvo<C-c>"_x``"_x
nnoremap dx{ va}<Plug>(RemovePair)
nmap dx} dx{
nmap dxB dx{
也就是说,使用环绕声。