ฉันคิดว่ามันจะเป็นประโยชน์ที่จะมีความเป็นไปได้ที่จะแลกเปลี่ยนtrueและfalseค่าในรหัสอย่างรวดเร็วด้วยการรวมกันctrl+ aหรือ+ctrl xมีปลั๊กอินสำหรับสิ่งนั้นหรืออย่างอื่น?
ฉันคิดว่ามันจะเป็นประโยชน์ที่จะมีความเป็นไปได้ที่จะแลกเปลี่ยนtrueและfalseค่าในรหัสอย่างรวดเร็วด้วยการรวมกันctrl+ aหรือ+ctrl xมีปลั๊กอินสำหรับสิ่งนั้นหรืออย่างอื่น?
คำตอบ:
ฉันเขียนปลั๊กอิน ( toggle-bool ) เพื่อสลับค่าบูลีนที่คุณสามารถลองใช้ได้ สนับสนุนค่าบูลีนต่อไปนี้:
true <-> falseyes <-> noon <-> off0 <-> 1มีswitch.vimและปรับแต่งได้
:Switchจุดเริ่มต้นที่หลักของปลั๊กอินเป็นคำสั่งเดียว เมื่อคำสั่งถูกเรียกใช้งานปลั๊กอินจะค้นหาหนึ่งในสองรูปแบบเฉพาะภายใต้เคอร์เซอร์และดำเนินการย่อยขึ้นอยู่กับรูปแบบ
ตัวอย่างเช่นหากเคอร์เซอร์อยู่trueในรหัสต่อไปนี้:
flag = true
จากนั้นเมื่อการดำเนินการ:Switchที่จะกลายเป็นtruefalse
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