Tauschen Sie die Werte "true" und "false" über Strg + a, Strg + x aus

10

Ich denke , es wäre sinnvoll sein , die Möglichkeit zu tauschen haben trueund falseschnell in der Code - Werten, mit Kombination ctrl+ aoder ctrl+ x. Gibt es ein Plugin dafür oder etwas anderes?

Alexander Myschow
quelle

Antworten:

6

Ich habe ein Plugin ( toggle-bool ) geschrieben, um die booleschen Werte umzuschalten, die Sie ausprobieren können. Es unterstützt die folgenden booleschen Werte:

  • true <-> false
  • yes <-> no
  • on <-> off
  • 0 <-> 1
Sagar Rakshe
quelle
Oh, das habe ich gesucht. Aber ich habe ein kleines Problem. Kannst du das Reparieren? github.com/sagarrakshe/toggle-bool/issues/1
Alexander Myshov
1
@ Lucidbrot korrigiert
Sagar Rakshe
12

Es gibt switch.vim und es ist anpassbar.

Der Haupteinstiegspunkt des Plugins ist ein einzelner Befehl :Switch. Wenn der Befehl ausgeführt wird, sucht das Plugin unter dem Cursor nach einem bestimmten Muster und führt je nach Muster eine Substitution durch.

Zum Beispiel, wenn sich der Cursor trueim folgenden Code auf befindet:

flag = true

dann wird beim Ausführen :Switchder trueWille in false.

VanLaser
quelle
Bitte! Ich habe diese verrückte Idee eines 'vim-dwim'-Plugins, das sich je nach Syntax unter dem Cursor unterschiedlich verhält (z. B. wenn Sie die Eingabetaste drücken), und ich denke, ich werde mich stark von diesem Plugin inspirieren. Wenn ich jemals anfangen kann, es zu machen, ist das so.
VanLaser
7

Fülle von Plugins

Toggling true/ falseund ähnliches wurde von vielen Plugin-Autoren implementiert. Zwei davon wurden bereits erwähnt:

  • switch.vim von Andrew Radev ( # 4172 , github ) und
  • Toggle-Bool von Sagar Rakshe ( Github ).

Andere sind Toggle von Timo Teifel ( # 895 ), Montag von Stefan Karlsson ( # 1046 ), Toggle_words von Vincent Wang ( # 1676 ), Toggle_word von Alexandru Ungur ( # 1748 ), incbool.vim von Dmitry Petrov ( # 4361 , Github ) , nextval von Michael Arlt ( # 4536 , github ).

Nur für den Fall, dass Sie die Anzahl gemäß einer benutzerdefinierten Serie erhöhen möchten, z. B. der Fibonacci-Serie, lesen Sie den Nexus von Barry Arthur ( Github ).

Plugins Supercharging Ctrl-A/X

Allerdings folgen nicht alle standardmäßig der Idee Ctrl-A/X, einen neuen Befehl und / oder eine neue Zuordnung (einschließlich switch.vim und toggle-bool ) zu erweitern, sondern zu definieren . Ich möchte die Plugins hervorheben, die sofort aufgeladen werden, Ctrl-A/Xund daher standardmäßig angeben, was das OP verlangt hat:

Ein verwandtes Plugin, das ebenfalls erweitert wird, Ctrl-A/Xist das Speeddating von Tim Pope ( # 2120 , Github ), mit dem Sie Daten erhöhen können.

Zurückfallen

Einige Plugins erlauben es, ein zweites Ctrl-A/XInkrementor-Plugin als Fallback zu kombinieren , z

  • SwapIt von Michael Brown:

    nmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    nmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    vmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    vmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    
  • Zyklus durch Bootleq:

    map <silent> <Plug>CycleFallbackNext <Plug>SpeedDatingUp
    map <silent> <Plug>CycleFallbackPrev <Plug>SpeedDatingDown
    
  • switch.vim von Andrew Radev:

    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>
    

Hinweis
Wenn Sie das Suchverhalten des integrierten Geräts verwenden Ctrl-A/X(nächstmöglichen Wert in Zeile zum Inkrementieren suchen ), kann das Aufladen diese stören.

Hotschke
quelle
1

Ändern Sie die Zuordnung auf das, was Sie verwenden möchten

Das Rückgängigmachen ist für den Fall, dass Sie es über einem Leerzeichen verwenden, da ciw das Leerzeichen anstelle des Wortes bearbeitet (und es keine einfache Möglichkeit gibt, zuverlässig zum richtigen Wort zu gelangen).

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

Beachten Sie auch, dass ^ M sein muss <C-V><Enter>, nicht wörtlich ^ M.

Efi
quelle
1
Willkommen auf dieser Seite! Beachten Sie, dass es interessant wäre, eine Bedingung hinzuzufügen, die die Funktion wie die integrierte macht, <C-a>und <C-x>wenn das aktuelle Wort kein Boolescher Wert ist, kann OP diese Zuordnungen auf diese Weise wirklich verwenden. Sie können auch <CR>anstelle von ^Min Ihrem Mapping verwenden, und es ist in der Regel eine bewährte Methode, einen Modus für Ihren mapBefehl bereitzustellen , hier nnoremapwäre angemessener als noremap.
Statox