[英]map = with space in vim with inoremap
首先,我必须承认,我做了很多事情,只需输入空格键,这是最容易按下的键。 但这是一种学习经验。 所以请帮助我解决问题。
问题是,我想在vim中输入" ="
时将其转换为" = "
,所以说"k =" -> "k = "
因此,我完成了映射:
inoremap <expr> = getline(".")[col(".")-2] =~ '[[:blank:])]' ? "= " : "="
到目前为止很好。 但是,当我需要使用" == "
时会出现问题。 使用上面的地图,我将始终以" = = "
结尾,这不是我想要的。
我试图像这样映射它:
inoremap <space>=<space>= <space>==<space>
除了令人烦恼的结果是,每当按下<space>
时,vim总是会等待下一个键,这也可以正常工作。
从vim_space_in_lhs开始,我也尝试过
inoremap <C-V><C-V><space>=<C-V><C-V><space>= <space>==<space>
但这完全破坏了映射,即,从第一个映射开始, "k ="
仍然像这样,而不是"k = "
。
我知道,我可以通过键入单个空格来解决所有问题,但是我想解决它。
请帮助。
inoremap <expr> = getline(".")[col(".")-3] == '=' ? "<bs>= " : getline(".")[col(".")-2] =~ '\s' ? "= " : "="
应该做
编辑:
鉴于新的要求 ,这里有一个功能以及将完成工作的相关映射。
注意:这是在ftplugins中定义的:您不希望在<
上这样的映射以类似xml的语言触发。 您可能还必须定义几个函数,或者在函数上定义第二个参数以更精确地处理这些映射的行为。
function! s:InsertExpr(char)
let line = getline('.')
let col = col('.')
return
\ line[col-3] =~ '[=<>!~]' ? "\<bs>".a:char." "
\ : line[col-2] =~ '\s\+' ? a:char." "
\ : a:char
endfunction
inoremap <buffer> <expr> = <sid>InsertExpr('=')
inoremap <buffer> <expr> < <sid>InsertExpr('<')
inoremap <buffer> <expr> > <sid>InsertExpr('>')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.