วิธีการเลือกระหว่างวงเล็บ (หรือเครื่องหมายคำพูดหรือ ... ) ใน Vim?


220

ฉันแน่ใจว่าเคยเป็นปลั๊กอินสำหรับสิ่งนี้ แต่ตอนนี้ฉันต้องการมันฉันไม่สามารถหามันได้ (โดยธรรมชาติ) ดังนั้นฉันจะถามดีและเรียบง่าย

วิธีที่ง่ายที่สุดในการเลือกระหว่างเครื่องหมายวงเล็บหรือคำพูดหรือรายการของอักขระที่ตรงกันคืออะไร

   write ( *, '(a)' ) 'Computed solution coefficients:'

ยกตัวอย่างเช่นที่นี่ฉันต้องการที่จะเลือกหรือ(a)Computed solution coefficients:

ฉันไม่สนใจ multiline เพียงกรณีที่เกิดขึ้นในหนึ่งบรรทัด

คำตอบ:


277

ใช้คีย์การนำทางใด ๆ ที่คุณต้องการเข้าไปในวงเล็บจากนั้นคุณสามารถใช้yi(หรือyi)คัดลอกทุกอย่างภายใน parens ที่ตรงกัน สามารถใช้กับวงเล็บเหลี่ยม (เช่นyi]) และเครื่องหมายปีกกา นอกเหนือไปจากyนี้คุณยังสามารถลบหรือเปลี่ยนแปลงข้อความ (เช่นci), di])

ฉันลองสิ่งนี้ด้วยเครื่องหมายคำพูดเดี่ยวและคู่และดูเหมือนว่าจะทำงานที่นั่นเช่นกัน สำหรับข้อมูลของคุณฉันทำ:

write (*, '(a)') 'Computed solution coefficients:'

เลื่อนเคอร์เซอร์ไปที่พิมพ์แล้วC yi'เลื่อนเคอร์เซอร์ไปที่บรรทัดว่างแล้วกดpและรับ

Computed solution coefficients:

ในฐานะที่เป็นCMS ตั้งข้อสังเกตผลงานนี้สำหรับการเลือกโหมดภาพเป็นอย่างดี - เพียงแค่การใช้งานvi), vi}, vi'ฯลฯ


1
โดยทั่วไปฉันกำลังมองหาวิธีการเลือกทุกสิ่งระหว่างตัวอักษรที่กำหนดไว้ล่วงหน้า (ปกติจะเป็นเพียงคำพูดเดี่ยวและคู่และเครื่องหมายวงเล็บทุกชนิด)
โกง

2
คุณหมายถึงคำที่แยกจากกัน? ฉันลองมันใน "[x, y, z]" และมันก็หยิบออกมา "x, y, z"
ทิม Whitcomb

4
ไม่ต้องสนใจความคิดเห็นล่าสุด - พบปัญหาที่เกิดขึ้น ทำงานเหมือนจับใจ :-)
โกง

ดูเหมือนว่าจะทำงานกับอัญประกาศและyi"เลือกการเสนอราคาภายในทั้งหมด
stefanB

ci(หรือci)ทำเพื่อสิ่งที่ฉันกำลังมองหา ขอบคุณ ฉันยังไม่เข้าใจอย่างถ่องแท้iในกรณีนี้ แต่ใครจะสนใจตราบใดที่มันใช้ได้ใช่มั้ย :)
justnorris

279

หากต้องการเลือกระหว่างอัญประกาศเดี่ยวฉันมักจะทำvi' ("เลือกอัญประกาศเดี่ยวภายใน")

ภายในบล็อกวงเล็บฉันใช้vib ("เลือกบล็อกภายใน")

ภายในบล็อคเหล็กดัดลอนที่คุณสามารถใช้viB("capital B")

ที่จะทำให้การเลือก "รวม" (เลือกนอกจากนี้ยังมีคำพูดหรือวงเล็บวงเล็บ) คุณสามารถใช้แทนai

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการเลือกวัตถุข้อความในคู่มือหรือ:help text-objectsภายในกลุ่ม


ขอบคุณสำหรับเคล็ดลับที่ฉันได้รับการค้นหาและขอสิ่งที่คล้ายกันและไม่พอใจกับผลลัพธ์ของฉัน น่ากลัว
alfredodeza

เคล็ดลับนี้ง่ายมากและง่ายต่อการจดจำในสมองและความจำของกล้ามเนื้อ ขอบคุณ
Ghazaly

นี่คือเคล็ดลับที่มีประโยชน์อย่างมาก ไม่มีการสะดุดด้วยการกดแป้นพิเศษ ขอบคุณสำหรับลิงค์
เชียงราย

27

วิธีการเลือกนี้มีอยู่ในตัวและครอบคลุมอย่างดีในความช่วยเหลือ Vim ครอบคลุมแท็ก XML และอีกมากมาย

:help text-objectsดู


1
: ช่วยให้วัตถุข้อความเข้าใกล้สิ่งที่มีประโยชน์ ... อย่างน้อยคุณสามารถพูดถึงสิ่งที่พบได้ทั่วไปเช่น "และ a (เมื่ออยู่ในโหมดภาพ
Stobor

2
(เช่น +1 เพราะแม้จะเป็นผู้ใช้กลุ่มที่ใช้เวลานาน แต่ฉันไม่รู้เกี่ยวกับสิ่งเหล่านี้!)
Stobor

@Stobor ไชโยแก้ไขการอ้างอิงนั้น

21

vi'สำหรับการเลือกใช้งานภายในราคาเดียว

vi(สำหรับการเลือกใช้ภายในวงเล็บ


3
หมายเหตุ: ci'หรือci(สำหรับการเปลี่ยนแทนการเลือกภาพ แต่มันก็เป็นสิ่งที่ฉันต้องการ ขอบคุณ :)
justnorris

อันที่สองทำงานได้เมื่ออยู่ภายในบล็อค () เท่านั้นดังนั้นโดยปกติฉันจะทำ%vi(หรือ%vib
816-8055

7

ใช้ลูกศรหรือhjklไปที่หนึ่งในนิพจน์การถ่ายคร่อมจากนั้นvเลือกโหมด visual (เช่นการเลือก) จากนั้น%ข้ามไปที่วงเล็บอื่น


5
(ไม่ได้ทำคำพูด แต่น่าเสียดายที่ ... )
Stobor

3

เขียนฟังก์ชั่นเป็นกลุ่มใน. vimrc โดยใช้searchpairฟังก์ชั่นในตัว:

searchpair({start}, {middle}, {end} [, {flags} [, {skip}
            [, {stopline} [, {timeout}]]]])
    Search for the match of a nested start-end pair.  This can be
    used to find the "endif" that matches an "if", while other
    if/endif pairs in between are ignored.
    [...]

( http://vimdoc.sourceforge.net/htmldoc/eval.html )


2

ฉันจะเพิ่มรายละเอียดให้กับคำตอบที่ได้รับการโหวตมากที่สุด:

หากคุณใช้ gvim และต้องการคัดลอกไปยังคลิปบอร์ดให้ใช้

"+<command>

เพื่อคัดลอกเนื้อหาทั้งหมดระหว่างวงเล็บ (หรือ parens หรือวงเล็บเหลี่ยม)

ตัวอย่างเช่น: "+yi}จะคัดลอกไปยังคลิปบอร์ดเนื้อหาทั้งหมดระหว่างวงเล็บปีกกาเคอร์เซอร์ของคุณคือ


2
นี่เป็นมุมฉากของปัญหาอย่างสมบูรณ์และไม่ควรเป็นคำตอบ คุณสามารถเขียนนี้ในทุกyคำถามที่ถามเกี่ยวกับ
ท่อ

นี่คือส่วนเพิ่มเติมของคำตอบไม่ใช่คำตอบ
yuriploc

จากนั้นควรแก้ไขคำตอบนั้นโพสต์นี้ตาม - ไม่ตอบคำถาม
ท่อ

นี่เป็นโฆษณาสำหรับไม่ใช้ gvim :) ใครต้องการกะ + keypresses เพิ่มอีกสองตัวในชีวิต
พอลปาร์คเกอร์

1

ฉันได้ทำปลั๊กอินvim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

มันมีวัตถุข้อความสำหรับคู่ราคาที่ใกล้เคียงที่สุดของประเภทใด ๆ การใช้เพียงอย่างเดียวiqหรือaqอนุญาตให้คุณทำงานกับเนื้อหาของเครื่องหมายคำพูดเดี่ยว ('), double (") หรือ back (`) ที่ล้อมรอบเคอร์เซอร์อยู่ด้านหน้าของเคอร์เซอร์หรือด้านหลัง (ตามลำดับที่ต้องการ) ในคำอื่น ๆ มันกระโดดไปข้างหน้าหรือข้างหลังเมื่อมีความจำเป็นในการเข้าถึงคำพูด

ง่ายต่อการเข้าใจโดยการดูตัวอย่าง (เคอร์เซอร์แสดงด้วย|):

  1. ก่อน: foo '1, |2, 3' bar; หลังจากกดdiq:foo '|' bar
  2. ก่อน: foo| '1, 2, 3' bar; หลังจากกดdiq:foo '|' bar
  3. ก่อน: foo '1, 2, 3' |bar; หลังจากกดdiq:foo '|' bar
  4. ก่อน: foo '1, |2, 3' bar; หลังจากกดdaq:foo | bar
  5. ก่อน: foo| '1, 2, 3' bar; หลังจากกดdaq:foo | bar
  6. ก่อน: foo '1, 2, 3' |bar; หลังจากกดdaq:foo | bar

ตัวอย่างข้างต้นจะได้รับการเสนอราคาเดียวปลั๊กอินทำงานเหมือนกันทุกประการสำหรับคำว่า double (") และ back (`)

นอกจากนี้คุณยังสามารถใช้ประกอบการอื่น ๆ : ciq, diq, yiq, viqฯลฯ

โปรดดูที่หน้า GitHub ที่เชื่อมโยงด้านบนเพื่อดูรายละเอียดเพิ่มเติม


-6

keymap ง่าย ๆ ในกลุ่มจะแก้ปัญหานี้ได้ map viq F” lvf” hh คำสั่งด้านบนนี้แม็พ viq กับปุ่มเพื่อค้นหาระหว่างเครื่องหมายคำพูด แทนที่ "ด้วยตัวอักษรใด ๆ และสร้างคีย์แมปของคุณทำสิ่งนี้ใน vimrc ในระหว่างการเริ่มต้นและคุณควรจะใช้มันทุกครั้ง

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