我认为通过组合+ 或+ 快速交换代码中的值true
和false
值将很有用。是否有用于该插件的插件或其他插件?ctrlactrlx
我认为通过组合+ 或+ 快速交换代码中的值true
和false
值将很有用。是否有用于该插件的插件或其他插件?ctrlactrlx
Answers:
我写了一个插件(toggle-bool)来切换可以尝试的布尔值。它支持以下布尔值:
true
<-> false
yes
<-> no
on
<-> off
0
<-> 1
有switch.vim,它是可定制的。
插件的主要入口点是单个命令
:Switch
。执行该命令时,插件会在光标下查找一些特定的模式之一,并根据该模式执行替换。
例如,如果光标true
在下面的代码中:
flag = true
然后执行时:Switch
,true
将变成false
。
切换true
/ false
等已由许多插件作者实现。已经提到其中两个:
其他人则切换由蒂莫Teifel(#895),周一由斯特凡·卡尔松(#1046),toggle_words文森特·王(#1676),toggle_word由亚历Ungur(#1748),incbool.vim德米特里·彼得罗夫(#4361,github上) ,nextval由Michael Arlt(#4536,github)。
万一你要根据定制系列,以增加数字,例如斐波纳契数列,检查出的Nexus由巴里·亚瑟(github上)。
Ctrl-A/X
但是,默认情况下,并非所有人都遵循扩展思想,Ctrl-A/X
而是定义了新命令和/或新映射(包括switch.vim和toggle-bool)。我想突出显示那些“增压” Ctrl-A/X
开箱即用的插件,因此,默认情况下会提供OP要求的内容:
Tim Pope(#2120,github)Ctrl-A/X
正在加速扩展一个相关的插件,它允许您增加日期。
一些插件允许组合第二个Ctrl-A/X
增量器插件作为后备,例如
迈克尔·布朗(Michael Brown)的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
Andrew Radev的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
函数的查找行为(在行中查找下一个可能的值以递增),则对它们进行增压会产生干扰。
将映射更改为要使用的映射
撤消是为了防止您在空格顶部使用它,因为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
<C-a>
并且<C-x>
当当前单词不是布尔值时,这种方式OP确实可以使用这些映射。另外,您也可以在映射中使用,<CR>
而不是^M
在映射中使用,通常最好的做法是为map
命令提供一种模式,这里nnoremap
比更为合适noremap
。