map = with space in vim with inoremap
map = with space in vim with inoremap
首先,我必须承认,我只是简单地输入了一个 spacebar,这是最容易按下的键。但这是一次学习经历。所以请帮我解决问题。
问题是,当我在 vim 中键入 " ="
时,它会转换为 " = "
,所以,比如说 "k =" -> "k = "
所以我做了一个映射:
inoremap <expr> = getline(".")[col(".")-2] =~ '[[:blank:])]' ? "= " : "="
到目前为止还不错。
但是,当我需要 " == "
时,问题就出现了。有了上面的地图,我总是会结束" = = "
,这不是我想要的
我尝试将其映射为:
inoremap <space>=<space>= <space>==<space>
这也工作正常,除了一个恼人的后果,即 vim 将始终在按下 <space>
时等待下一个键。
从vim_space_in_lhs开始我也试过了
inoremap <C-V><C-V><space>=<C-V><C-V><space>= <space>==<space>
但这会完全破坏映射,即 "k ="
保持原样,而不是第一个映射中的 "k = "
。
我知道,我输入一个就可以解决所有问题space,但我想解决它
请帮忙。
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('>')
首先,我必须承认,我只是简单地输入了一个 spacebar,这是最容易按下的键。但这是一次学习经历。所以请帮我解决问题。
问题是,当我在 vim 中键入 " ="
时,它会转换为 " = "
,所以,比如说 "k =" -> "k = "
所以我做了一个映射:
inoremap <expr> = getline(".")[col(".")-2] =~ '[[:blank:])]' ? "= " : "="
到目前为止还不错。
但是,当我需要 " == "
时,问题就出现了。有了上面的地图,我总是会结束" = = "
,这不是我想要的
我尝试将其映射为:
inoremap <space>=<space>= <space>==<space>
这也工作正常,除了一个恼人的后果,即 vim 将始终在按下 <space>
时等待下一个键。
从vim_space_in_lhs开始我也试过了
inoremap <C-V><C-V><space>=<C-V><C-V><space>= <space>==<space>
但这会完全破坏映射,即 "k ="
保持原样,而不是第一个映射中的 "k = "
。
我知道,我输入一个就可以解决所有问题space,但我想解决它
请帮忙。
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('>')