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