Cambie los valores "verdadero" y "falso" a través de ctrl + a, ctrl + x

10

Creo que sería útil tener la posibilidad de intercambiar truey falsevalores en el código rápidamente, con la combinación ctrl+ ao ctrl+ x. ¿Hay algún complemento para eso o algo más?

Alexander Myshov
fuente

Respuestas:

6

Escribí un complemento ( toggle-bool ) para alternar los valores booleanos, puedes probarlo. Admite los siguientes valores booleanos:

  • true <-> false
  • yes <-> no
  • on <-> off
  • 0 <-> 1
Sagar Rakshe
fuente
Oh, es lo que estaba buscando. Pero tengo un pequeño problema. ¿Puedes arreglarlo? github.com/sagarrakshe/toggle-bool/issues/1
Alexander Myshov
1
@lucidbrot corregido
Sagar Rakshe
12

Hay switch.vim , y es personalizable.

El punto de entrada principal del plugin es un solo comando, :Switch. Cuando se ejecuta el comando, el complemento busca uno de los pocos patrones específicos debajo del cursor y realiza una subposición según el patrón.

Por ejemplo, si el cursor está trueen el siguiente código:

flag = true

luego, al ejecutar :Switch, truese convertirá en false.

VanLaser
fuente
¡De nada! Tengo esta idea loca de un complemento 'vim-dwim' que actúa de manera diferente según la sintaxis debajo del cursor (por ejemplo, al presionar Enter), y creo que me inspiraré mucho de este complemento. Si alguna vez empiezo a hacerlo, eso es.
VanLaser
7

Gran cantidad de complementos

La alternancia true/ falsey similar ha sido implementada por muchos autores de complementos Dos de ellos ya han sido mencionados:

  • switch.vim por Andrew Radev ( # 4172 , github ) y
  • toggle-bool de Sagar Rakshe ( github ).

Otros son de palanca de Timo Teifel ( # 895 ), Lunes de Stefan Karlsson ( # 1046 ), toggle_words por Vincent Wang ( # 1676 ), toggle_word por Alexandru Ungur ( # 1748 ), incbool.vim por Dmitry Petrov ( # 4361 , github ) , nextval por Michael Arlt ( # 4536 , github ).

En caso de que desee aumentar los números de acuerdo con una serie personalizada, por ejemplo, la serie Fibonacci, consulte el nexo de Barry Arthur ( github ).

Complementos de sobrealimentación Ctrl-A/X

Sin embargo, no todos ellos siguen de manera predeterminada la idea de extender, Ctrl-A/Xsino que definen un nuevo comando y / o una nueva asignación (incluido. Switch.vim y toggle-bool ). Quiero resaltar aquellos complementos que se 'sobrecargan' Ctrl-A/Xde fábrica y, por lo tanto, proporcionar de forma predeterminada lo que ha pedido el OP:

Un plugin relacionado que también se extiende Ctrl-A/Xes la fecha rápida de Tim Pope ( # 2120 , github ) que le permite incrementar las fechas.

Retroceder

Algunos complementos permiten combinar un segundo Ctrl-A/Xincremento o complemento como respaldo, p. Ej.

  • SwapIt por Michael Brown:

    nmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    nmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    vmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    vmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    
  • ciclo por bootleq:

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

Nota
Si usa el comportamiento de búsqueda de la función integrada Ctrl-A/X(encuentre el siguiente valor posible en la línea para aumentar), la sobrealimentación puede interferir.

Hotschke
fuente
1

cambie la asignación a lo que desea usar

el deshacer es en caso de que lo use en la parte superior de un espacio, ya que ciw editará el espacio en lugar de la palabra (y no hay una manera fácil de llegar a la palabra correcta de manera confiable)

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

También tenga en cuenta que ^ M debe ser <C-V><Enter>, no literalmente ^ M

Efi
fuente
1
Bienvenido a este sitio! Tenga en cuenta que sería interesante agregar una condición que haga que la función sea como la incorporada <C-a>y <C-x>cuando la palabra actual no sea booleana, de esta manera OP realmente podría usar estas asignaciones. También puede usar en <CR>lugar de ^Men su mapeo, y generalmente es una mejor práctica proporcionar un modo a su mapcomando, aquí nnoremapsería más apropiado que noremap.
statox