Змінюйте значення "true" і "false" через ctrl + a, ctrl + x


10

Я думаю, було б корисно мати можливість швидко змінювати місцями trueі falseзначеннями в коді, комбінуючи ctrl+ aабо ctrl+ x. Чи є якийсь плагін для цього чи чогось іншого?

Відповіді:


6

Я написав плагін ( toggle-bool ) для перемикання булевих значень, ви можете спробувати. Він підтримує наступні булеві значення:

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

О, це те, що я шукав. Але у мене невелика проблема. Ви можете це виправити? github.com/sagarrakshe/toggle-bool/isissue/1
Олександр Мишов

1
@lucidbrot виправлено
Сагар Ракше

12

Є switch.vim , і це налаштовується.

Основна точка входу плагіна є однією командою, :Switch. Коли команда виконується, плагін шукає один із декількох конкретних шаблонів під курсором і виконує підстанцію залежно від шаблону.

Наприклад, якщо курсор увімкнено trueу наступному коді:

flag = true

то після виконання :Switch, trueволя перетвориться на false.


Ласкаво просимо! У мене є ця божевільна ідея плагіна "vim-dwim", який діє по-різному на основі синтаксису під курсором (наприклад, під час натискання клавіші Enter), і я думаю, що я сильно надихнуся на цей плагін. Якщо я коли-небудь прийму почати робити це, тобто.
VanLaser

7

Безліч плагінів

Toggle true/ falseта подібне було реалізовано багатьма авторами плагінів. Про них уже згадувалося два:

  • switch.vim від Андрія Радева ( № 4172 , github ) та
  • toggle-bool від Сагара Ракше ( github ).

Інші - тумблер Тимо Тейфеля ( №895 ), понеділок - Стефан Карлссон ( # 1046 ), перемикач_словів Вінсента Ванга ( # 1676 ), перемикання_слова Олександра Унгура ( # 1748 ), інкбул.вім Дмитра Петрова ( # 4361 , github ) , nextval Майкла Арльта ( # 4536 , github ).

На всякий випадок, якщо ви хочете збільшити кількість відповідно до користувальницької серії, наприклад, серії Фібоначчі, перегляньте зв'язок Баррі Артура ( github ).

Плагіни нагнітання Ctrl-A/X

Однак не всі вони за замовчуванням дотримуються ідеї розширити, Ctrl-A/Xале визначити нову команду та / або нове відображення (включаючи switch.vim та toggle-bool ). Я хочу виділити ті плагіни, які "надзаряджаються" Ctrl-A/Xпоза коробкою, і, таким чином, надаю за замовчуванням те, що попросила ОП:

  • SwapIt Майкла Брауна ( # 2294 , github ),
  • Активатор приросту від Takuya Nishigori ( # 4817 , github ),
  • CtrlXA від Konfekt ( № 5600 , github ),
  • Цикл : Зеф Хассні ( github ),
  • Цикл по bootleq ( github )

Пов’язаний плагін, який також розширюється, Ctrl-A/X- це пришвидшення роботи Тіма Попа ( # 2120 , github ), що дозволяє збільшити дати.

Відступати

Деякі плагіни дозволяють поєднувати другий Ctrl-A/Xплагін інкрементора як резервний, наприклад

  • 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
    
  • 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

також зауважте, що ^ М повинно бути <C-V><Enter>, а не буквально ^ М


1
Ласкаво просимо на цей сайт! Зауважте, що було б цікаво додати умову, яка б зробила функцію на зразок вбудованої, <C-a>і <C-x>коли поточне слово не є булевим, таким чином ОП дійсно зможе використовувати ці відображення. Крім того, ви можете використовувати <CR>замість ^Mсвого картографування, і зазвичай найкращою практикою є надання режиму для вашої mapкоманди, тут nnoremapбуло б більш доцільно, ніж noremap.
statox
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.