ctrl + a、ctrl + xで「true」と「false」の値を入れ替えます


10

+ または+の組み合わせで、コード内の値truefalse値をすばやくスワップできる可能性があると便利です。そのためのプラグインはありますか?ctrlactrlx

回答:


6

私はあなたがそれを試すことができるブール値を切り替えるためのプラグイン(toggle-bool)を書きました。次のブール値をサポートしています。

  • true <-> false
  • yes <-> no
  • on <-> off
  • 0 <-> 1

ああ、それは私が探していたものです。しかし、小さな問題があります。直せますか?github.com/sagarrakshe/toggle-bool/issues/1
Alexander Myshov

1
@lucidbrot修正
Sagar Rakshe

12

switch.vimがあり、カスタマイズ可能です。

プラグインの主なエントリポイントは、単一のコマンドです:Switch。コマンドが実行されると、プラグインはカーソルの下にあるいくつかの特定のパターンの1つを探し、パターンに応じて置換を実行します。

たとえば、カーソルがtrue次のコードのにある場合:

flag = true

実行する:Switchと、trueはに変わりfalseます。


どういたしまして!カーソルの下の構文に基づいて異なる動作をする 'vim-dwim'プラグインというこのクレイジーなアイデアがあります(たとえば、Enterキーを押したとき)。このプラグインから大きくインスパイアされると思います。もしそれを作り始めたら、それはそうです。
VanLaser、2015年

7

プラグインの数々

true/ falseなどの切り替えは、多くのプラグイン作成者によって実装されています。それらの2つはすでに言及されています。

  • Andrew Radevによるswitch.vim#4172github)および
  • トグル・ブールサーガルRakshe(でgithubの)。

その他は、トグルティモTeifelによって(#895)、月曜日ステファン・カールソン(による#1046)、toggle_wordsヴィンセント王(で#1676)、toggle_wordアレクサンドルUngur(による#1748)、incbool.vimドミトリー・ペトロフ(で#4361githubの) 、NEXTVALマイケル・アルルト(で#4536githubの)。

フィボナッチシリーズなどのカスタムシリーズに従って数値を増やしたい場合に備えて、Barry Arthurによるネクサスgithub)をチェックしてください。

プラグインのスーパーチャージ Ctrl-A/X

ただし、それらすべてがデフォルトで拡張するという考えに従うわけではありませんCtrl-A/Xが、新しいコマンドや新しいマッピング(switch.vimtoggle-boolを含む)を定義ます。私Ctrl-A/Xはすぐに「スーパーチャージ」するプラグインを強調表示したいので、デフォルトでOPが要求したものを提供します。

  • Michael BrownによるSwapIt#2294github)、
  • Increment-activator by Takuy​​a Nishigori(#4817github)、
  • CtrlXA by Konfekt(#5600github)、
  • Zef Houssney(github)によるサイクル
  • bootleq(github)によるサイクル

同じく拡張されてCtrl-A/Xいる関連プラグインは、日付を増やすことができるTim Pope(#2120github)による高速化です。

後退する

一部のプラグインでは、2番目のCtrl-A/Xインクリメンタープラグインをフォールバックとして組み合わせることができます。

  • Michael BrownによるSwapIt

    nmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    nmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    vmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    vmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    
  • bootleqによるサイクル

    map <silent> <Plug>CycleFallbackNext <Plug>SpeedDatingUp
    map <silent> <Plug>CycleFallbackPrev <Plug>SpeedDatingDown
    
  • Andrew Radevによるswitch.vim

    nnoremap <c-a> :if !switch#Switch()<bar>call speeddating#increment()<bar>endif<cr>
    nnoremap <c-x> :if !switch#Switch({'reverse': 1})<bar>call speeddating#decrement()<bar>endif<cr>
    


ビルトインのシーク動作を使用する場合Ctrl-A/X(次の可能な値をインクリメントして見つける)、それらをスーパーチャージすると干渉する可能性があります。


1

マッピングを使用したいものに変更します

元に戻すは、スペースの上で使用する場合です。ciwは単語の代わりにスペースを編集するためです(そして、正しい単語に確実に到達する簡単な方法はありません)。

function SwapBool ()
  let s:w = expand("<cword>")
  if s:w == "false"
    normal ciwtrue
    if expand("<cword>") != "true"
      normal u
    endif
  elseif s:w == "true"
    normal ciwfalse
    if expand("<cword>") != "false"
      normal u
    endif
  endif
endfunction
noremap <C-F> :call SwapBool()^M

また、^ Mはである必要があること<C-V><Enter>に注意してください。


1
このサイトへようこそ!注それは関数のようになるだろう条件を追加するために興味深いものになるだろうということを内蔵<C-a>し、<C-x>現在の単語がないブールあるとき、このようOPは本当にこれらのマッピングを使用することができるだろう。また、マッピングでの<CR>代わりにを使用することもできます。^M通常、mapコマンドにモードを提供することがベストプラクティスnnoremapですnoremap
statox
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.