สลับค่า“ จริง” และ“ เท็จ” ผ่าน 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
Alexander Myshov

1
แก้ไข @lucidbrot แล้ว
Sagar Rakshe

12

มีswitch.vimและปรับแต่งได้

:Switchจุดเริ่มต้นที่หลักของปลั๊กอินเป็นคำสั่งเดียว เมื่อคำสั่งถูกเรียกใช้งานปลั๊กอินจะค้นหาหนึ่งในสองรูปแบบเฉพาะภายใต้เคอร์เซอร์และดำเนินการย่อยขึ้นอยู่กับรูปแบบ

ตัวอย่างเช่นหากเคอร์เซอร์อยู่trueในรหัสต่อไปนี้:

flag = true

จากนั้นเมื่อการดำเนินการ:Switchที่จะกลายเป็นtruefalse


ยินดีต้อนรับคุณ! ฉันมีความคิดที่บ้าคลั่งของปลั๊กอิน 'vim-dwim' ที่ทำหน้าที่แตกต่างกันไปตามไวยากรณ์ภายใต้เคอร์เซอร์ (เช่นเมื่อกด Enter) และฉันคิดว่าฉันจะสร้างแรงบันดาลใจให้ตัวเองจากปลั๊กอินนี้อย่างมาก ถ้าฉันจะเริ่มทำมันนั่นแหละ
VanLaser

7

ปลั๊กอินมากมายเหลือเฟือ

Toggling true/ falseและคล้ายคลึงกันได้รับการดำเนินการโดยผู้เขียนปลั๊กอินจำนวนมาก ทั้งสองได้ถูกกล่าวถึงแล้ว:

  • switch.vimโดย Andrew Radev ( # 4172 , github ) และ
  • toggle-boolโดย Sagar Rakshe ( github )

คนอื่น ๆ ถูกสลับโดย 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 ได้ถาม:

  • SwapItโดย Michael Brown ( # 2294 , gitub )
  • โปรแกรมเพิ่มค่า -โดย Takuya Nishigori ( # 4817 , github )
  • CtrlXAโดย Konfekt ( # 5600 , github )
  • วงรอบโดย Zef Houssney ( github ),
  • วนตาม bootleq ( github )

ปลั๊กอินที่เกี่ยวข้องซึ่งขยายออกไป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(ค้นหาค่าที่เป็นไปได้ต่อไปในบรรทัดเพื่อเพิ่มขึ้น) การอัดประจุมากเกินไปอาจรบกวน


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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.