Поменяйте местами значения «истина» и «ложь» с помощью 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/issues/1
Александр Мышов
1
@lucidbrot исправлено
Сагар Ракше
12

Существует switch.vim , и он настраивается.

Главной точкой входа плагина является одна команда :Switch. Когда команда выполняется, плагин ищет один из нескольких определенных шаблонов под курсором и выполняет подстановку в зависимости от шаблона.

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

flag = true

затем, после выполнения :Switch, trueпревратится в false.

VanLaser
источник
Пожалуйста! У меня есть эта сумасшедшая идея плагина vim-dwim, который действует по-разному в зависимости от синтаксиса под курсором (например, при нажатии Enter), и я думаю, что я буду сильно вдохновлять себя от этого плагина. Если я когда-нибудь начну это делать, то это так.
VanLaser
7

Множество плагинов

Переключение true/ falseи подобное было реализовано многими авторами плагинов. Два из них уже были упомянуты:

  • switch.vim от Эндрю Радева ( # 4172 , github ) и
  • тумблер BOOL от Сагар Rakshe ( GitHub ).

Другие - переключение Тимо Тейфеля ( # 895 ), понедельник - Стефана Карлссона ( # 1046 ), toggle_words - Винсента Вана ( # 1676 ), toggle_word - Александра Унгура ( # 1748 ), incbool.vim - Дмитрия Петрова ( # 4361 , github ) , следующий шаг Майкла Арлта ( # 4536 , github ).

На всякий случай, если вы хотите увеличить числа в соответствии с пользовательской серией, например, серией Фибоначчи, обратитесь к Nexus от Barry Arthur ( github ).

Плагины с наддувом Ctrl-A/X

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

  • SwapIt Майкла Брауна ( # 2294 , github ),
  • Активатор прироста Такуя Нисигори ( № 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(найдите следующее возможное значение в строке для приращения), перегружать их может помешать.

Hotschke
источник
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

также обратите внимание, что ^ M должен быть <C-V><Enter>, а не буквально ^ M

Эфи
источник
1
Добро пожаловать на этот сайт! Обратите внимание, что было бы интересно добавить условие, которое сделало бы функцию похожей на встроенную, <C-a>и <C-x>когда текущее слово не является логическим, таким образом OP действительно сможет использовать эти отображения. Кроме того, вы можете использовать <CR>вместо ^Mсвоего отображения, и, как правило, рекомендуется предоставить режим для вашей mapкоманды, здесь nnoremapболее подходящим, чем noremap.
statox