Troque os valores "verdadeiro" e "falso" via ctrl + a, ctrl + x


10

Eu acho que seria útil ter a possibilidade de trocar truee falsevalores no código rapidamente, com a combinação ctrl+ aou ctrl+ x. Existe algum plugin para isso ou algo mais?

Respostas:



12

switch.vim , e é personalizável.

O principal ponto de entrada do plug-in é um único comando :Switch,. Quando o comando é executado, o plug-in procura um dos poucos padrões específicos sob o cursor e executa uma subestação, dependendo do padrão.

Por exemplo, se o cursor estiver no truecódigo a seguir:

flag = true

depois de executar :Switch, o trueirá se transformar false.


De nada! Eu tenho essa ideia maluca de um plugin 'vim-dwim' que age de maneira diferente com base na sintaxe sob o cursor (por exemplo, ao pressionar Enter) e acho que vou me inspirar bastante nesse plugin. Se eu começar a fazê-lo, é isso.
VanLaser

7

Pletora de Plugins

A alternância true/ falsee similar foi implementada por muitos autores de plugins. Dois deles já foram mencionados:

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

Outros são alternados por Timo Teifel ( # 895 ), segunda-feira por 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 ).

Caso você queira aumentar os números de acordo com uma série personalizada, por exemplo, a série Fibonacci, consulte o nexus de Barry Arthur ( github ).

Supercharging de plugins Ctrl-A/X

No entanto, nem todos eles seguem por padrão a idéia de estender, Ctrl-A/Xmas definem um novo comando e / ou um novo mapeamento (incluindo switch.vim e toggle-bool ). Quero destacar os plugins que 'sobrecarregam' imediatamente Ctrl-A/Xe, portanto, fornecem por padrão o que o OP pediu:

Um plugin relacionado que também se estende Ctrl-A/Xé a speeddating de Tim Pope ( # 2120 , github ) que permite aumentar as datas.

Cair pra trás

Alguns plug-ins permitem combinar um segundo Ctrl-A/Xplug-in incrementador como substituto, por exemplo

  • SwapIt de 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
Se você usar o comportamento de busca do builtin Ctrl-A/X(encontre o próximo valor possível na linha para incrementar), sobrecarregá-los pode interferir.


1

altere o mapeamento para o que você deseja usar

o desfazer é no caso de você usá-lo em cima de um espaço, pois o ciw editará o espaço em vez da palavra (e não há uma maneira fácil de obter a palavra certa de maneira confiável)

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

observe também que ^ M precisa ser <C-V><Enter>, não literalmente ^ M


11
Bem-vindo a este site! Observe que seria interessante adicionar uma condição que tornaria a função como a incorporada <C-a>e, <C-x>quando a palavra atual não for booleana, dessa forma, o OP seria realmente capaz de usar esses mapeamentos. Além disso, você pode usar em <CR>vez de ^Mno seu mapeamento, e geralmente é uma prática recomendada fornecer um modo ao seu mapcomando, aqui nnoremapseria mais apropriado do que noremap.
statox
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.