ฉันคิดว่ามันจะเป็นประโยชน์ที่จะมีความเป็นไปได้ที่จะแลกเปลี่ยนtrue
และfalse
ค่าในรหัสอย่างรวดเร็วด้วยการรวมกันctrl+ aหรือ+ctrl xมีปลั๊กอินสำหรับสิ่งนั้นหรืออย่างอื่น?
ฉันคิดว่ามันจะเป็นประโยชน์ที่จะมีความเป็นไปได้ที่จะแลกเปลี่ยนtrue
และfalse
ค่าในรหัสอย่างรวดเร็วด้วยการรวมกันctrl+ aหรือ+ctrl xมีปลั๊กอินสำหรับสิ่งนั้นหรืออย่างอื่น?
คำตอบ:
ฉันเขียนปลั๊กอิน ( toggle-bool ) เพื่อสลับค่าบูลีนที่คุณสามารถลองใช้ได้ สนับสนุนค่าบูลีนต่อไปนี้:
true
<-> false
yes
<-> no
on
<-> off
0
<-> 1
มีswitch.vimและปรับแต่งได้
:Switch
จุดเริ่มต้นที่หลักของปลั๊กอินเป็นคำสั่งเดียว เมื่อคำสั่งถูกเรียกใช้งานปลั๊กอินจะค้นหาหนึ่งในสองรูปแบบเฉพาะภายใต้เคอร์เซอร์และดำเนินการย่อยขึ้นอยู่กับรูปแบบ
ตัวอย่างเช่นหากเคอร์เซอร์อยู่true
ในรหัสต่อไปนี้:
flag = true
จากนั้นเมื่อการดำเนินการ:Switch
ที่จะกลายเป็นtrue
false
Toggling true
/ false
และคล้ายคลึงกันได้รับการดำเนินการโดยผู้เขียนปลั๊กอินจำนวนมาก ทั้งสองได้ถูกกล่าวถึงแล้ว:
คนอื่น ๆ ถูกสลับโดย Timo Teifel ( # 895 ) วันจันทร์โดย Stefan Karlsson ( # 1046 ), toggle_wordsโดย Vincent Wang ( # 1676 ), toggle_wordโดย Alexandru Ungur ( # 1748 ), incbool.vimโดย Dmitry Petrov ( # 4361 , github ) , nextvalโดย Michael Arlt ( # 4536 , github )
ในกรณีที่คุณต้องการเพิ่มตัวเลขตามซีรี่ส์ที่กำหนดเองเช่นชุดฟีโบนักชีให้ดูNexusโดย Barry Arthur ( github )
Ctrl-A/X
อย่างไรก็ตามไม่ใช่ทั้งหมดตามด้วยความคิดเริ่มต้นที่จะขยายCtrl-A/X
แต่กำหนดคำสั่งใหม่และ / หรือการทำแผนที่ใหม่ (รวม. switch.vimและtoggle-bool ) ฉันต้องการเน้นปลั๊กอินเหล่านั้นที่ 'ซูเปอร์ชาร์จ' Ctrl-A/X
ออกจากกล่องและดังนั้นโดยค่าเริ่มต้นสิ่งที่ OP ได้ถาม:
ปลั๊กอินที่เกี่ยวข้องซึ่งขยายออกไปCtrl-A/X
คือspeeddatingโดย Tim Pope ( # 2120 , github ) ซึ่งอนุญาตให้คุณเพิ่มวันที่
ปลั๊กอินบางตัวอนุญาตให้รวมCtrl-A/X
ปลั๊กอินส่วนเพิ่มที่สองเป็นทางเลือกเช่น
SwapItโดย Michael Brown:
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โดย 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>
หมายเหตุ
ถ้าคุณใช้พฤติกรรมการค้นหาของ builtin 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