在VIM中,如何使用波浪号(〜)运算符将==更改为!=?

时间:2013-02-04 17:03:01

标签: vim

我想要普通模式命令代字号~,除了更改字母大小写以将文本==更改为!=!=更改为{{ 1}}。

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

3 个答案:

答案 0 :(得分:2)

让我提出一种替代实现此扩展~命令的

nnoremap <silent> ~ :call SwitchNeq()<cr>~
function! SwitchNeq()
    let [s, c] = [@/, getpos('.')]
    s/[!=]\ze\%#=\|\%#[!=]\ze=/\='!='[submatch(0)=='!']/e
    let @/ = s
    call setpos('.', c)
endfunction

答案 1 :(得分:2)

在两个选项之间切换(例如==!=)只是在多个选项之间切换的特殊情况。我建议不要重载二进制~命令,而是使用<C-A> / <C-X>SwapIt - Extensible keyword swapper plugin提供此功能,实际上有一个默认选项可以切换==!=<=等。

答案 2 :(得分:1)

这在vimscript中相当简单。 将以下内容从其他文件添加到您的.vimrcsource此代码中。

" ----------------------
"  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>