繁体   English   中英

map = inoremap在vim中有空格

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM