สมมติว่าฉันมีรหัสบรรทัดนี้:
$query = "SELECT * FROM table";
มีคำสั่งใน vi / vim ที่สามารถลบทุกอย่างได้ทันทีระหว่างเครื่องหมายคำพูดและตำแหน่งเคอร์เซอร์ระหว่างคำสั่งเพื่อให้ฉันเริ่มพิมพ์ได้หรือไม่?
สมมติว่าฉันมีรหัสบรรทัดนี้:
$query = "SELECT * FROM table";
มีคำสั่งใน vi / vim ที่สามารถลบทุกอย่างได้ทันทีระหว่างเครื่องหมายคำพูดและตำแหน่งเคอร์เซอร์ระหว่างคำสั่งเพื่อให้ฉันเริ่มพิมพ์ได้หรือไม่?
คำตอบ:
F"ci"
.
คุณสามารถเลือกระหว่างเครื่องหมายคำพูดแล้วลบ ( d
) เปลี่ยน ( c
) ฯลฯ โดยใช้
vi"
ในทำนองเดียวกันคุณสามารถแทนที่วงเล็บปีกกาองค์ประกอบ XML ฯลฯ ได้ดังนี้:
vi(
vi{
vit
หรือเพียงแค่การเปลี่ยนแปลง / ลบทำที่สอดคล้องกันdi"
, ci"
ฯลฯ แทนa
สำหรับi
พินัยกรรมครอบคลุมองค์ประกอบโดยรอบ (เพื่อให้คุณทำเครื่องหมายหรือเปลี่ยนวงเล็บและเนื้อหาตัวอย่าง)
ฉันได้สร้างปลั๊กอินvim-textobj-quotes
: https://github.com/beloglazov/vim-textobj-quotes
มีวัตถุข้อความสำหรับคู่คำพูดที่ใกล้เคียงที่สุดทุกประเภทและรองรับคำพูดที่ครอบคลุมหลายบรรทัด ใช้เพียงอย่างเดียวiq
หรือaq
อนุญาตให้คุณดำเนินการกับเนื้อหาของเครื่องหมายคำพูด single ('), double (") หรือ back (`) ที่ล้อมรอบเคอร์เซอร์อยู่หน้าเคอร์เซอร์หรืออยู่ข้างหลัง (ตามลำดับที่ต้องการ) กล่าวอีกนัยหนึ่งก็คือมันจะกระโดดไปข้างหน้าหรือข้างหลังเมื่อจำเป็นเพื่อเข้าถึงเครื่องหมายคำพูด
ง่ายต่อการทำความเข้าใจโดยดูจากตัวอย่าง (เคอร์เซอร์แสดงด้วย|
):
foo '1, |2, 3' bar
; หลังจากกดdiq
:foo '|' bar
foo| '1, 2, 3' bar
; หลังจากกดdiq
:foo '|' bar
foo '1, 2, 3' |bar
; หลังจากกดdiq
:foo '|' bar
foo '1, |2, 3' bar
; หลังจากกดdaq
:foo | bar
foo| '1, 2, 3' bar
; หลังจากกดdaq
:foo | bar
foo '1, 2, 3' |bar
; หลังจากกดdaq
:foo | bar
ตัวอย่างด้านบนมีให้สำหรับอัญประกาศเดี่ยวปลั๊กอินจะทำงานในลักษณะเดียวกันสำหรับเครื่องหมายคำพูดคู่ (") และหลัง (`)
นอกจากนี้คุณยังสามารถใช้ประกอบการอื่น ๆ : ciq
, diq
, yiq
, viq
ฯลฯ
โปรดดูหน้า github ที่ลิงก์ด้านบนสำหรับรายละเอียดเพิ่มเติม
จากภายในคำพูดที่คุณสามารถทำได้
di"
อ่านเป็นลบด้านใน "
นอกจากคำตอบของ Brian แล้วคุณยังสามารถp
(วาง) และy
(ดึง) ค่าใหม่ได้ดังนั้นหากคุณต้องการแทนที่ค่าภายในเครื่องหมายคำพูดด้วยค่าอื่นคุณสามารถyi"
เลือกสิ่งที่คุณต้องการคัดลอกvi"
เพื่อเลือกพื้นที่ได้ ที่คุณต้องการแทนที่แล้วเพียงp
เพื่อแทนที่ค่าอย่างถูกต้อง
คำตอบที่เลือกเหมาะสำหรับ ViM เท่านั้น แต่ไม่ใช่สำหรับ vi คำถามไม่ถูกต้องเช่นกันเนื่องจากผู้เขียนไม่ได้กล่าวถึงตำแหน่งเริ่มต้นของเคอร์เซอร์คืออะไร หากเราสมมติว่าเคอร์เซอร์อยู่ในเครื่องหมายคำพูดคู่สำหรับ vi คำตอบจะเป็น:
T"ct"
ที่ไหน:
T "- เลื่อนกลับหลังอักขระ"
c - เปลี่ยนคำสั่ง
t "- ระบุตำแหน่งสิ้นสุดสำหรับคำสั่ง c ซึ่งควรหยุดการลบอักขระกล่าวอีกนัยหนึ่งคือช่วงที่จะเปลี่ยน
vim
vi
(ไม่แน่ใจ)