ภูมิภาคสี่เหลี่ยมเป็นวัตถุข้อความ?


11

เป็นไปได้ที่จะกำหนดวัตถุข้อความในกลุ่มที่จะทำหน้าที่ในพื้นที่สี่เหลี่ยม?

ตัวอย่างเช่นสมมติว่าฉันมีแนวคอลัมน์แนวตั้งของข้อความเช่นนี้

column 1 co    column 2 col
lumn 1 colu    umn 2 column
mn 1 column    2 column 2 c
1 column 1     olumn 2 colu

มันจะเป็นไปได้ที่จะกำหนด textobject cสำหรับคอลัมน์เช่นนั้นdacจะลบคอลัมน์yacจะดึงมันcacจะเปลี่ยนหรือไม่?

(ฉันรู้เกี่ยวกับ Control-V สำหรับการเลือกพื้นที่สี่เหลี่ยมและฉันรู้ว่าคุณสามารถใช้d, yฯลฯ เพื่อลบ, งัด ฯลฯ ภูมิภาคที่เลือก แต่ฉันอยากรู้เฉพาะเกี่ยวกับสิ่งที่เป็นไปได้โดยใช้วัตถุข้อความ)


6
เป็นไปได้ไหม? แน่นอน! กรณีและจุด: textobj-word-column.vim
Peter Rincker

@PeterRincker นี้เป็นสิ่งที่ดี แต่ผมสงสัยว่ามันไม่ได้ง่ายเพื่อใช้ประโยชน์จาก Kana ของtextobj ผู้ใช้
lcd047

ขอบคุณปีเตอร์นั่นเป็นตัวอย่างที่ฉันกำลังมองหา
Leah Velleman

2
@PeterRincker ตอบคำถามนี้ :)
Vitor

คำตอบ:


5

ใช่มันเป็นไปได้ @PeterRincker แนะนำปลั๊กอินtextobj คำคอลัมน์ซึ่งกำหนดสี่วัตถุข้อความ ( ic, ac, iCและaC) สำหรับคอลัมน์คำ-based

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

xnoremap <silent> ac :<C-u>call TextObjWordBasedColumn("aw")<cr>
xnoremap <silent> aC :<C-u>call TextObjWordBasedColumn("aW")<cr>
xnoremap <silent> ic :<C-u>call TextObjWordBasedColumn("iw")<cr>
xnoremap <silent> iC :<C-u>call TextObjWordBasedColumn("iW")<cr>
onoremap <silent> ac :call TextObjWordBasedColumn("aw")<cr>
onoremap <silent> aC :call TextObjWordBasedColumn("aW")<cr>
onoremap <silent> ic :call TextObjWordBasedColumn("iw")<cr>
onoremap <silent> iC :call TextObjWordBasedColumn("iW")<cr>

นี่TextObjWordBasedColumn(...)กำหนดเคลื่อนไหวคอลัมน์และถูกจับคู่กับภาพโหมดทั้ง / select กับและผู้ประกอบการโหมดที่มีอยู่ระหว่างดำเนินการxnoremap onoremapโปรดทราบว่าฟังก์ชั่นมีความซับซ้อนเล็กน้อยเพื่อจัดการกับการเยื้องและค้นหาขอบเขตการเคลื่อนที่ที่เหมาะสม


4

เป็นไปได้ไหม? แน่นอน! และกรณีที่จุด: textobj คำ-column.vim

วิธีสร้างวัตถุข้อความของคุณเอง

โดยทั่วไปโหมดภาพจะใช้ในการสร้างวัตถุข้อความใหม่ โหมดภาพสามารถเป็นตัวละครตัวละครตัวละคร (ปกติ) หรือบล็อกภาพ นี่คือพื้นฐานของสิ่งที่คุณต้องการ:

  • การรวมกันที่สำคัญที่ไม่ได้ใช้โดยทั่วไปa{char}หรือi{char}ที่{char}มีทั้งความหมายและที่ไม่ได้ใช้ เช่นi/เป็นวัตถุข้อความตัวอย่างระหว่าง/'s
  • ต้องการวิธีในการหาจุดเริ่มต้นของวัตถุข้อความของคุณ เช่นT/
  • ต้องการวิธีในการหาจุดสิ้นสุดของวัตถุข้อความของคุณ เช่นt/
  • เลือกโหมดภาพ เช่นv
  • สร้างโหมดภาพ (เท่านั้น) xnoremapการทำแผนที่ผ่านทาง
  • สร้างผู้ประกอบการที่อยู่ระหว่างดำเนินการทำแผนที่โหมดที่ใช้ในการทำแผนที่โหมดภาพผ่านทางและonoremap:normal

ตอนนี้เป็นตัวอย่างของความง่ายของเราi/ซึ่งสร้าง text-object ระหว่าง/:

xnoremap i/ :<c-u>normal! T/vt/<cr>
onoremap i/ :normal vi/<cr>

ตราบใดที่คุณทำตามส่วนผสมพื้นฐานคุณสามารถสร้างวัตถุข้อความสำหรับทุกสิ่ง

การสร้างวัตถุข้อความขั้นสูงด้วย vim-textobj-user

เป็นกลุ่ม-textobj ผู้ใช้ปลั๊กอินให้เป็นวิธีการทั่วไปในการกำหนดข้อความวัตถุที่กำหนดเองในแบบที่เปิดเผยมากขึ้น ตัวอย่างเช่นนี่คือ php text-object:

call textobj#user#plugin('php', {
\   'code': {
\     'pattern': ['<?php\>', '?>'],
\     'select-a': 'aP',
\     'select-i': 'iP',
\   },
\ })

สำหรับความช่วยเหลือเพิ่มเติมกับกลุ่ม-textobj :h textobj-user-introductionผู้ใช้ดูความช่วยเหลือของเอกสาร:

สำหรับความช่วยเหลือเพิ่มเติม

:h map-overview
:h visual-start
:h :norm

เช่นเดียวกับหน้าการสร้างวัตถุข้อความใหม่เป็นกลุ่มวิกิ

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