วิธีการดึงสายด้วยหมายเลขบรรทัดที่แน่นอน?


41

บอกว่าฉันอยู่ที่บรรทัดที่ 20 และฉันต้องการที่จะดึงสาย 4 ฉันจะทำอย่างไร

และในทำนองเดียวกันฉันจะดึงเส้นหนึ่งที่สัมพันธ์กับตำแหน่งเคอร์เซอร์ของฉันพูดว่าหนึ่งบรรทัด 3 เส้นขึ้นไปได้อย่างไร


คำตอบ:


59

จาก:help :yank:

:[range]y[ank] [x]      Yank `[range]` lines [into register x].

ดังนั้นในการดึงบรรทัดที่ 4 เราจะพิมพ์:

:4yank

หมายเหตุคุณสามารถทำได้จากโหมดแทรกด้วย<C-o>; สิ่งนี้ช่วยให้คุณสามารถรันคำสั่งเดียวได้หลังจากนั้นคุณจะกลับสู่โหมดแทรก ตัวอย่างเช่น:

<C-o>:4yank

แน่นอนคุณสามารถใช้ช่วงอื่น ๆ ได้เช่นกัน ตัวอย่างบางส่วน:

  • บรรทัดที่ 1 ถึง 3: :1,3yank
  • บัฟเฟอร์ทั้งหมด: :%yank
  • จากบรรทัดปัจจุบันถึงจุดสิ้นสุดของบัฟเฟอร์: :.,$:yank
  • บรรทัดปัจจุบันและ 3 ถัดไป: :.,+3yank
  • บรรทัดปัจจุบันและ 3 ก่อนหน้า: :-3,.yank
  • บรรทัดที่ 3 บรรทัดเหนือบรรทัดปัจจุบัน: :-3yank

สิ่งที่มีประโยชน์ที่สุดที่ควรจดจำเกี่ยวกับช่วง:

  • :line1,line2commandมันอยู่ในรูปแบบของ
  • A .คือบรรทัดปัจจุบัน (คุณสามารถละเว้นจุดในกรณีส่วนใหญ่:.,+3yankและ:,+3yankเหมือนกัน)
  • คุณสามารถระบุสายสัมพันธ์กับตำแหน่งปัจจุบันกับและ+n-n

ดู:help [range]ข้อมูลเพิ่มเติม


6
คะแนนโบนัสสำหรับการกล่าวถึง <Co> ฉันกำลังทำเช่นนั้น
PhilippFrank

7
นอกจากนี้ยังเป็นมูลค่าการกล่าวขวัญว่าคุณสามารถย่อ:4yankด้วย:4y
NewbieOnRails

35

นอกจากนี้ในการตอบ Carpetsmoker ของฉันควรจะชี้น่ากลัวและ:help :m:help :t

หากคุณต้องการคัดลอกบรรทัดที่ 4 ไปทางด้านล่างบรรทัดปัจจุบันคุณสามารถทำได้:

:4t.

หรือถ้าคุณต้องการคัดลอกบรรทัดนั้นอยู่เหนือบรรทัดปัจจุบัน:

:4t-

1

นอกจากคำสั่ง ex-mode ที่คุณได้รับแล้วคุณสามารถทำสิ่งนั้นได้ในโหมดคำสั่งเช่นโดย: 4GY''- ซึ่งหมายถึง: goto line 4 ( 4G), yank line ( Y), และกลับไปยังบรรทัดก่อนหน้า ( '')

คุณยังสามารถใช้เครื่องหมายกระโดด สำหรับคำถามที่สองของคุณเช่นโดย: mm3kY'm- ซึ่งหมายถึง: set mark m ( mm), ไปสามบรรทัดขึ้นไป ( 3k), yank line ( Y), กลับไปที่ mark m ( 'm)


1
การใช้ `` น่าจะเป็นคำแนะนำที่ดีกว่า '' ตั้งแต่อดีตจะกลับไปที่บรรทัดและคอลัมน์เดียวกัน เหมือนกันสำหรับ `m vs. 'm
jamessan

ฉันเห็นด้วย. (ความคิดใด ๆ วิธีการสร้าง backtics ที่แท้จริงใน wiki markup เนื่องจากมีความหมายพิเศษ) - มิฉะนั้นความคิดเห็นของคุณจะให้บริการได้ดีรวมถึงการแก้ไขคำตอบของฉันและเป็นคำแนะนำสำหรับผู้อ่าน
Janis

คุณต้องใช้ backticks หลายรายการเพื่อกำหนดเขตอินไลน์โค้ด (cf, daringfireball.net/projects/markdown/syntax#code ) ฉันรู้ว่ามันใช้งานได้ในคำถาม / คำตอบ แต่ฉันไม่สามารถใช้ในการแสดงความคิดเห็นได้
jamessan

1

เพียงพิมพ์

:4y

ถึงเส้นแบ่ง 4

มันจะเข้าสู่การลงทะเบียนที่ไม่มีชื่อ จากนั้น (ตัวอย่าง) คุณสามารถใช้pวางไว้ที่อื่น คุณยังสามารถใช้[n]pเช่น 10p เพื่อวาง 10 ครั้ง

คุณสามารถใส่ลงทะเบียนชื่อเช่น "a" ด้วย

:4y a

2
ส่วนเกี่ยวกับการใส่ลงทะเบียนชื่อกับ "ay4 ดูไม่ถูกต้องถ้าคุณทำเช่นนั้นกลุ่มจะรอให้คุณพูดว่า" 4 whats? "เช่นถ้าคุณกด Enter มันจะดึง 4 บรรทัดเริ่มต้นที่ ตำแหน่งปัจจุบันหากคุณพิมพ์ / foo <Enter> มันจะงัดจนกระทั่งเกิดเหตุการณ์ที่ตามมาเป็นครั้งที่ 4 ของ "foo" เป็นต้น
Don Hatch

4G"ayyคำสั่งสุดท้ายควรอ่าน
romainl

0

คุณทำได้

:10y <Enter> (to copy the line 10)
p (paste line 10 where the cursor is)

การตั้งค่าหมายเลขสัมพันธ์ช่วยในการย้ายระหว่างบรรทัดของรหัสเช่นกัน

:set relativenumber

ตอนนี้คุณสามารถคัดลอกบรรทัดที่ 5 เหนือเคอร์เซอร์ด้วย:

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