Échangez les valeurs «vrai» et «faux» via ctrl + a, ctrl + x

10

Je pense qu'il serait utile d'avoir la possibilité d'échanger trueet de falsevaleurs dans le code rapidement, avec combinaison ctrl+ aou ctrl+ x. Y a-t-il un plugin pour ça ou autre chose?

Alexander Myshov
la source

Réponses:

6

J'ai écrit un plugin ( toggle-bool ) pour basculer les valeurs booléennes que vous pouvez essayer. Il prend en charge les valeurs booléennes suivantes:

  • true <-> false
  • yes <-> no
  • on <-> off
  • 0 <-> 1
Sagar Rakshe
la source
Oh, c'est ce que je cherchais. Mais j'ai un petit problème. Peux-tu le réparer? github.com/sagarrakshe/toggle-bool/issues/1
Alexander Myshov
1
@lucidbrot corrigé
Sagar Rakshe
12

Il y a switch.vim , et il est personnalisable.

Le point d'entrée du module d' extension est une commande unique, :Switch. Lorsque la commande est exécutée, le plugin recherche l'un des quelques modèles spécifiques sous le curseur et effectue une sous-station en fonction du modèle.

Par exemple, si le curseur se trouve sur le truedans le code suivant:

flag = true

puis lors de l'exécution :Switch, le truedeviendra false.

VanLaser
la source
Vous êtes les bienvenus! J'ai cette idée folle d'un plugin «vim-dwim» qui agit différemment en fonction de la syntaxe sous le curseur (par exemple lorsque vous appuyez sur Entrée), et je pense que je vais m'inspirer fortement de ce plugin. Si jamais je commence à le faire, c'est.
VanLaser
7

Pléthore de plugins

Le basculement true/ falsesimilaire a été implémenté par de nombreux auteurs de plugins. Deux d'entre eux ont déjà été mentionnés:

  • switch.vim par Andrew Radev ( # 4172 , github ) et
  • toggle-bool par Sagar Rakshe ( github ).

D' autres sont à bascule par Timo Teifel ( # 895 ), lundi par Stefan Karlsson ( # 1046 ), toggle_words par Vincent Wang ( # 1676 ), toggle_word par Alexandru Ungur ( # 1748 ), incbool.vim par Dmitry Petrov ( # 4361 , github ) , nextval de Michael Arlt ( # 4536 , github ).

Juste au cas où vous voudriez augmenter les nombres selon une série personnalisée, par exemple la série Fibonacci, consultez nexus de Barry Arthur ( github ).

Plugins Supercharging Ctrl-A/X

Cependant, tous ne suivent pas par défaut l'idée d'étendre Ctrl-A/Xmais définissent une nouvelle commande et / ou un nouveau mappage (y compris switch.vim et toggle-bool ). Je veux mettre en évidence les plugins qui `` suralimentent '' Ctrl-A/Xet, par conséquent, fournissent par défaut ce que l'OP a demandé:

Un plugin connexe qui s'étend également Ctrl-A/Xest la datation rapide par Tim Pope ( # 2120 , github ) qui vous permet d'incrémenter les dates.

Se retirer

Certains plugins permettent de combiner un deuxième Ctrl-A/Xplugin incrémenteur comme solution de rechange, par exemple

  • SwapIt par Michael Brown:

    nmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    nmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    vmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    vmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    
  • cycle par bootleq:

    map <silent> <Plug>CycleFallbackNext <Plug>SpeedDatingUp
    map <silent> <Plug>CycleFallbackPrev <Plug>SpeedDatingDown
    
  • switch.vim par 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>
    

Remarque
Si vous utilisez le comportement de recherche de la fonction intégrée Ctrl-A/X(recherchez la prochaine valeur possible dans la ligne à incrémenter), leur suralimentation peut interférer.

Hotschke
la source
1

changez le mappage en ce que vous voulez utiliser

l'annulation est dans le cas où vous l'utilisez au-dessus d'un espace, car ciw modifiera l'espace au lieu du mot (et il n'y a pas de moyen facile d'obtenir le bon mot de manière fiable)

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

notez également que ^ M doit être <C-V><Enter>, pas littéralement ^ M

Efi
la source
1
Bienvenue sur ce site! Notez qu'il serait intéressant d'ajouter une condition qui rendrait la fonction similaire à celle intégrée <C-a>et <C-x>lorsque le mot actuel n'est pas un booléen, de cette façon OP serait vraiment capable d'utiliser ces mappages. Vous pouvez également utiliser <CR>au lieu de ^Mdans votre mappage, et il est généralement préférable de fournir un mode à votre mapcommande, ici nnoremapserait plus approprié que noremap.
statox