Vim 如何更改波浪线操作符‘==’;到‘=’;在维姆?

Vim 如何更改波浪线操作符‘==’;到‘=’;在维姆?,vim,Vim,我希望正常模式命令tilde~,除了更改字母的大小写外,还能够将文本==更改为=和=到== 我发现我经常这样做,我想要一个仍然使用瓷砖的快捷方式。这在vimscript中相当简单。 将以下内容添加到您的.vimrc或源代码中此代码来自不同的文件 " ---------------------- " Tilde switches ==/!= " ---------------------- function! TildeSwitch() " Gets the pair of characte

我希望正常模式命令tilde
~
,除了更改字母的大小写外,还能够将文本
==
更改为
=
=
==


我发现我经常这样做,我想要一个仍然使用瓷砖的快捷方式。

这在vimscript中相当简单。 将以下内容添加到您的
.vimrc
源代码中
此代码来自不同的文件

" ----------------------
"  Tilde switches ==/!=
" ----------------------
function! TildeSwitch()
  " Gets the pair of characters under the cursor, before and behind.
  let cur_pair = getline(".")[col(".") - 2 : col(".") - 1]
  let next_pair = getline(".")[col(".") - 1 : col(".")]

  if cur_pair == "=="
    normal! "_ch!
    normal! l
  elseif next_pair == "=="
    normal! r!
  elseif cur_pair == "!="
    normal! "_ch=
    normal! l
  elseif next_pair == "!="
    normal! r=
  else
    " If == and != are not found, simply use the regular tilde.
    normal! ~
  endif
endfunction

nnoremap <silent> ~ :silent call TildeSwitch()<cr>
”----------------------
“Tilde开关==/=
" ----------------------
函数!TildeSwitch()
获取光标下的前后字符对。
让cur_pair=getline(“.”[col(“.”-2:col(“.”-1]
让next_pair=getline(“.”[col(“.”)-1:col(“.”]
如果cur_pair==“=”
正常!“!!
正常
elseif next_pair==“=”
正常!r!
其他当前对==“="
正常!“\u ch=
正常!L
其他如果下一对==“!=”
正常!r=
其他的
“如果找不到==和!=,只需使用常规平铺。
正常~
恩迪夫
端功能
nnoremap~:静默调用TildeSwitch()

让我提出这个扩展的
~
命令的替代实现:

nnoremap~:调用SwitchNeq()~
函数!SwitchNeq()
让[s,c]=[@/,getpos('.')]
s/[!=]\ze\%\\\\%\\\%\\\[!=]\ze=/\='!='[submatch(0)='!']/e
让@/=s
调用setpos('.',c)
端功能

在两个选项之间切换(如
=
!=
)这只是在多个选项之间切换的一个特例。我建议不要重载二进制
~
命令,而是使用
/
。提供了这一功能,并且实际上有一个默认选项来切换
==
!=
@Kent,回答您自己的问题是。在这一个问题上,我确实找到了问题n不过有点奇怪,因为无论如何使用
r
并不是很短。@cms\u mgr当我从!=更改为==时,我几乎总是意外地点击
~
,而不是r!这让我感到很困惑。我想记录一下我在这里做的事情,因为堆栈溢出对于这样的小例子来说是很好的。Fwiw,这个问题很困惑g从一开始就如你所说。你说的是~normal mode命令,而不是运算符,而你问的是更改
==
等运算符;-)你能添加一些注释来解释它是如何工作的吗?或者也许只是解释一下想法?在
之前的
是什么,在进行更改时,该寄存器不是自动填充的吗?
“\u
是黑洞寄存器(
\u
)。我在那里使用该寄存器,以便“上次使用的”
寄存器保持不变。