วิธีการวางข้อความ yanked ลงในบรรทัดคำสั่ง Vim


601

ฉันต้องการวางข้อความที่ดึงลงในบรรทัดคำสั่งของ Vim เป็นไปได้ไหม?


สำหรับกรณีพิเศษของการรันข้อความ yanked โดยตรงดู: คุณจะรันคำสั่ง vim ที่เป็นข้อความภายในบัฟเฟอร์ได้อย่างไร - ผู้ใช้ขั้นสูง
user202729

คำตอบ:


1157

ใช่. ตีCtrl- แล้วR "หากคุณมีการควบคุมตัวอักษรตัวอักษรในสิ่งที่คุณได้กระชากใช้Ctrl- R, Ctrl- ,O"

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

รีจิสเตอร์นั้นเป็นตำแหน่งที่เก็บข้อมูลสำหรับสตริง Vim มีรีจิสเตอร์จำนวนมากที่ทำงานในวิธีที่ต่างกัน:

  • 0(yank register: เมื่อคุณใช้yในโหมดปกติโดยไม่ต้องระบุ register ข้อความ yanked จะไปที่นั่นและไปยัง register เริ่มต้น)
  • 1ถึง9(เลื่อนการลบการลงทะเบียนเมื่อคุณใช้คำสั่งเช่นcหรือdสิ่งที่ถูกลบไปที่การลงทะเบียน 1 สิ่งที่อยู่ในการลงทะเบียน 1 ไปที่การลงทะเบียน 2 เป็นต้น )
  • "(ค่าเริ่มต้นลงทะเบียนหรือที่เรียกว่าการลงทะเบียนที่ไม่มีชื่อนี่คือที่"มาCtrl- R, ")
  • aเพื่อzสำหรับการใช้งานของคุณเอง (ทุนAที่จะZใช้สำหรับการผนวกกับการลงทะเบียนที่สอดคล้องกัน)
  • _(ทำหน้าที่เหมือน/dev/null(Unix) หรือNUL(Windows) คุณสามารถเขียนถึงมัน แต่มันถูกทิ้งและเมื่อคุณอ่านมันจะว่างเสมอ)
  • - (ลบการลงทะเบียนขนาดเล็ก)
  • /(ค้นหาลงทะเบียนรูปแบบการปรับปรุงเมื่อคุณมองหาข้อความที่มี/, ?, *หรือ#เช่นนั้นคุณยังสามารถเขียนไปเพื่อจะเปลี่ยนรูปแบบการค้นหา)
  • :(เก็บ VimL คำสั่งสุดท้ายที่พิมพ์ผ่านQหรือ:อ่านอย่างเดียว)
  • +และ*(ลงทะเบียนคลิปบอร์ดระบบคุณสามารถเขียนถึงพวกเขาเพื่อตั้งค่าคลิปบอร์ดและอ่านเนื้อหาคลิปบอร์ดจากพวกเขา)

ดู:help registersการอ้างอิงแบบเต็ม

คุณสามารถใช้:registersเพื่อแสดงเนื้อหาของการลงทะเบียนได้ทุกเวลา คำพ้องและ shorthands สำหรับคำสั่งนี้มี:display, และ:reg:di

ในโหมดแทรกหรือบรรทัดคำสั่งCtrl- Rบวกชื่อลงทะเบียนแทรกเนื้อหาของการลงทะเบียนนี้ หากคุณต้องการแทรกอย่างแท้จริง (ไม่มีการเยื้องอัตโนมัติไม่มีการแปลงอักขระควบคุมเช่น0x08backspace ฯลฯ ) คุณสามารถใช้Ctrl- R, Ctrl- O, ชื่อลงทะเบียน ดู:help i_CTRL-Rและย่อหน้าต่อไปนี้สำหรับการอ้างอิงเพิ่มเติม

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

  • ":pในโหมดปกติตี คำสั่งสุดท้ายที่คุณใช้เป็นกลุ่มจะถูกวางลงในบัฟเฟอร์ของคุณ
    มาย่อยสลายกัน: "เป็นคำสั่งโหมดปกติที่ให้คุณเลือกว่าจะใช้รีจิสเตอร์ใดในระหว่างการดึงลบหรือวางถัดไป ดังนั้น":เลือกโคลอนรีจิสเตอร์ (การเก็บคำสั่งสุดท้าย) จากนั้นpเป็นคำสั่งที่คุณรู้แล้วมันวางเนื้อหาของการลงทะเบียน

    cf เลย :help ",:help quote_:

  • คุณกำลังแก้ไขไฟล์ VimL (เช่นคุณ.vimrc) yj:@"Enterและต้องการที่จะดำเนินการคู่สายติดต่อกันในขณะนี้:
    ที่นี่yjyanks บรรทัดปัจจุบันและถัดไป (นี่เป็นเพราะ j คือการเคลื่อนไหว linewise แต่นี่อยู่นอกขอบเขตของคำตอบนี้) ในการลงทะเบียนเริ่มต้น (หรือที่เรียกว่าการลงทะเบียนที่ไม่มีชื่อ) จากนั้น:@คำสั่ง Ex จะเล่นคำสั่ง Ex ที่เก็บไว้ใน register ที่กำหนดเป็นอาร์กิวเมนต์และ"เป็นวิธีที่คุณอ้างถึง register ที่ไม่มีชื่อ ดูด้านบนของคำตอบนี้ซึ่งเกี่ยวข้อง

    อย่าสับสน"ใช้ที่นี่ (ซึ่งเป็นชื่อลงทะเบียน) กับ"จากตัวอย่างก่อนหน้านี้ซึ่งเป็นคำสั่งโหมดปกติ

    cf เลย :help :@และ:help quote_quote

  • ใส่รูปแบบการค้นหาที่ผ่านมาเป็นไฟล์ของคุณในโหมดแทรกหรือเข้าไปในบรรทัดคำสั่งที่มีCtrl- ,R/

    cf เลย :help quote_/,help i_CTRL-R

    ควันหลง: เก็บรูปแบบการค้นหาของคุณ แต่เพิ่มทางเลือก: / Ctrl- ,R/ \|alternative

  • คุณได้เลือกสองคำที่อยู่ตรงกลางบรรทัดในโหมดภาพแล้วดึงคำเหล่านั้นด้วยyพวกเขาอยู่ในการลงทะเบียนที่ไม่มีชื่อ :puตอนนี้คุณต้องการที่จะเปิดตัวสายผลิตภัณฑ์ใหม่ด้านล่างที่ที่คุณอยู่กับทั้งสองคำ: :put "นี่คือชวเลข :putคำสั่งเช่นคำสั่ง Ex หลายทำงานเฉพาะ linewise

    cf เลย :help :put

    นอกจากนี้คุณยังจะได้ทำ: แล้ว:call setreg('"', @", 'V') ฟังก์ชั่นชุดลงทะเบียนซึ่งเป็นชื่อที่ได้รับเป็นอาร์กิวเมนต์แรก (เป็นสตริง) เริ่มต้นด้วยเนื้อหาของอาร์กิวเมนต์ที่สอง (และคุณสามารถใช้ลงทะเบียนเป็นตัวแปรที่มีชื่อที่เป็นชื่อลงทะเบียนใน VimL) และ เปลี่ยนเป็นโหมดที่ระบุในอาร์กิวเมนต์ที่สามสำหรับ linewise ไม่มีอะไรสำหรับ characterwise และ literal สำหรับ blockwisepsetreg@xxV^V

    cf เลย :help setreg(). ฟังก์ชั่นกลับและgetreg()getregtype()

  • หากคุณบันทึกแมโครด้วยqa... qจากนั้น:echo @aจะบอกสิ่งที่คุณพิมพ์และ@aจะเล่นซ้ำแมโคร (อาจเป็นเพราะคุณรู้ว่ามีประโยชน์อย่างมากในการหลีกเลี่ยงงานซ้ำ ๆ )

    cf เลย :help q,help @

    ข้อสรุปจากตัวอย่างก่อนหน้า: หากคุณมี8goในคลิปบอร์ดแล้ว@+จะเล่นเนื้อหาคลิปบอร์ดเป็นมาโครและไปที่ไบต์ที่ 8 ของไฟล์ของคุณ จริง ๆ แล้วมันจะทำงานกับการลงทะเบียนเกือบทุก หากสตริงที่คุณแทรกล่าสุดอยู่ddในโหมดแทรกดังนั้น@.จะ (เพราะการ.ลงทะเบียนมีสตริงที่แทรกล่าสุด) ลบบรรทัด (เอกสารที่เป็นกลุ่มที่เป็นธรรมในเรื่องนี้เพราะมันระบุว่าการลงทะเบียน#, %, :และ.จะทำงานเฉพาะกับp, P, :putและCtrl- R)

    cf เลย :help @

    อย่าสับสน:@(คำสั่งที่เล่นคำสั่ง Vim จากการลงทะเบียน) และ@(คำสั่งโหมดปกติที่เล่นคำสั่งโหมดปกติจากการลงทะเบียน)

    @:ยกเว้นที่น่าสังเกตคือ การลงทะเบียนคำสั่งไม่ได้มีเครื่องหมายโคลอนเริ่มต้นและไม่มีการคืนค่าขนส่งครั้งสุดท้าย อย่างไรก็ตามในโหมดปกติ@:จะทำสิ่งที่คุณคาดหวังตีความการลงทะเบียนเป็นคำสั่ง Ex ไม่พยายามเล่นในโหมดปกติ ดังนั้นหากคำสั่งสุดท้ายของคุณคือ:eการลงทะเบียนมีeแต่@:จะโหลดไฟล์ใหม่ไม่ไปที่จุดสิ้นสุดของคำ

    cf เลย :help @:

  • @='dd' Enterแสดงสิ่งที่คุณจะทำในโหมดปกติก่อนที่จะใช้มัน ทันทีที่คุณกด=ปุ่ม Vim จะเปลี่ยนเป็นการประเมินผลนิพจน์: เมื่อคุณป้อนนิพจน์และกดปุ่มEnterVim จะคำนวณและผลลัพธ์จะทำหน้าที่เป็นเนื้อหาการลงทะเบียน แน่นอนว่าการลงทะเบียน=เป็นแบบอ่านอย่างเดียวและถ่ายได้ครั้งเดียว ทุกครั้งที่คุณเริ่มใช้งานคุณจะต้องป้อนนิพจน์ใหม่

    cf เลย :help quote_=

    ข้อสรุป: หากคุณกำลังแก้ไขคำสั่งและคุณตระหนักดีว่าคุณควรจะแทรกบรรทัดคำสั่งของคุณในบัฟเฟอร์บรรทัดปัจจุบันของคุณ: อย่ากดEsc! การใช้งาน-Ctrl R =getline(58) Enterหลังจากนั้นคุณจะกลับไปที่การแก้ไขบรรทัดคำสั่ง แต่มันได้แทรกเนื้อหาของบรรทัดที่ 58

  • กำหนดรูปแบบการค้นหาด้วยตนเอง: :let @/ = 'foo'

    cf เลย :help :let

    ทราบว่าการทำเช่นนั้นคุณไม่จำเป็นต้องหลบหนี/ในรูปแบบ อย่างไรก็ตามคุณจำเป็นต้องเพิ่มราคาเป็นสองเท่าของหลักสูตรทั้งหมด

  • คัดลอกทุกสายเริ่มต้นด้วยfooและหลังจากนั้นทุกสายที่มีbarไปยังคลิปบอร์ดโซ่คำสั่งเหล่านี้: qaq(รีเซ็ตลงทะเบียนการจัดเก็บแมโครที่ว่างภายในมัน) , ,:g/^foo/y A:g/bar/y A:let @+ = @a

    การใช้ชื่อทุนจดทะเบียนทำให้การลงทะเบียนทำงานในโหมดต่อท้าย

    ดีกว่าถ้าQไม่ได้รับการ remapped โดยmswin.vimเริ่มต้นโหมด Ex กับQห่วงโซ่บรรดา“คำสั่งลำไส้ใหญ่” ซึ่งเป็นจริงดีที่เรียกว่า“คำสั่ง Ex” visualและกลับไปที่โหมดปกติโดยการพิมพ์

    cf เลย :help :g, :help :y,:help Q

  • เว้นวรรคไฟล์ของคุณ: :g/^/put _. สิ่งนี้ทำให้เนื้อหาของการลงทะเบียนหลุมดำ (ว่างเมื่ออ่าน แต่เขียนได้ปฏิบัติเหมือน/dev/null) linewise หลังจากแต่ละบรรทัด (เพราะทุกบรรทัดมีจุดเริ่มต้น!)

  • เพิ่มบรรทัดที่มีfooก่อนแต่ละบรรทัด: :g/^/-put ='foo'. นี่เป็นการใช้การลงทะเบียนนิพจน์อย่างชาญฉลาด นี่-คือคำพ้องสำหรับ.-1(cf. :help :range) เนื่องจาก:putใส่ข้อความหลังบรรทัดคุณต้องบอกให้ดำเนินการกับข้อความก่อนหน้าอย่างชัดเจน

  • :%y+คัดลอกบัฟเฟอร์ทั้งหมดไปยังคลิปบอร์ดระบบ:

    cf เลย :help :range(สำหรับ%บางส่วน) :help :yและ

  • หากคุณบันทึกแมโครผิดคุณสามารถพิมพ์:let @a=' Ctrl- R =replace(@a,"'","''",'g') Enter 'และแก้ไขได้ สิ่งนี้จะแก้ไขเนื้อหาของแมโครที่เก็บไว้ในรีจิสเตอร์aและจะแสดงที่นี่วิธีที่คุณสามารถใช้นิพจน์รีจิสเตอร์

  • ถ้าคุณทำddddคุณอาจทำuuเพื่อเลิกทำ ด้วยpคุณจะได้รับบรรทัดที่ถูกลบล่าสุด แต่จริงๆแล้วคุณยังสามารถกู้คืนได้ถึง 9 ลบกับการลงทะเบียนผ่าน@1@9

    ยิ่งไปกว่านั้นถ้าคุณทำ"1Pแล้ว.ในโหมดปกติจะเล่น"2Pและต่อ ๆ ไป

    cf เลย :help .และ:help quote_number

  • หากคุณต้องการแทรกวันที่ปัจจุบันในโหมดแทรก: -CtrlR=strftime('%y%m%d')Enter

    cf เลย :help strftime()

สิ่งที่อาจทำให้สับสน:

  • :@ เป็นคำสั่งบรรทัดคำสั่งที่ตีความเนื้อหาของการลงทะเบียนเป็น vimscript และแหล่งมัน
  • @ ในคำสั่งโหมดปกติที่ตีความเนื้อหาของการลงทะเบียนเป็นการกดแป้นโหมดปกติ (ยกเว้นเมื่อคุณใช้การ:ลงทะเบียนที่มีคำสั่งเล่นล่าสุดโดยไม่ต้องโคลอนเริ่มต้น: ในกรณีนี้มันจะซ้ำคำสั่งราวกับว่าคุณพิมพ์โคลอนและ คีย์ส่งคืนสุดท้าย)

  • " ในคำสั่งโหมดปกติที่ช่วยให้คุณเลือกลงทะเบียนสำหรับงัด, วาง, ลบ, แก้ไข, ฯลฯ

  • " ยังเป็นชื่อรีจิสเตอร์ที่ถูกต้อง (ดีฟอลต์หรือไม่มีชื่อรีจิสเตอร์) และสามารถส่งผ่านเป็นอาร์กิวเมนต์สำหรับคำสั่งที่ต้องการชื่อรีจิสเตอร์

205
ไม่มีป้าย "อัตราส่วนความยาว 100/1 คะแนนระหว่างคำตอบและคำถาม" :)
เบอนัวต์

8
มันเป็นคำตอบที่ยอดเยี่ยม แต่มีความยาว 900 คำโดยประมาณ 1,400 คำ :)

19
คำตอบนี้เปลี่ยนวิธีที่ฉันใช้เป็นกลุ่ม ขอบคุณ Benoit
P. Myer Nore

11
อย่าลืม: reg ซึ่งจะแสดงรายการการลงทะเบียนทั้งหมดพร้อมกับเนื้อหา
eugenevd

3
ในเวอร์ชันล่าสุดของ vim การลบที่มีขนาดเล็กกว่าหนึ่งบรรทัดเข้าสู่ "การลบขนาดเล็กลงทะเบียน" แทนที่จะไปที่รีจิสเตอร์ตัวเลข ข้อมูลอ้างอิง: Vi และ Vim , Vi และ Vim , Reddit
Christian Long

48

สำหรับการวางสิ่งที่อยู่ในระบบคลิปบอร์ดคุณก็สามารถใช้-SHIFTINS

มันใช้งานได้ใน Windows แต่ฉันเดาว่ามันทำงานได้ดีใน Linux เช่นกัน


7
ใช่ทำงานใน Linux ด้วย ทดสอบภายใต้ GNOME ทั้ง Vim และ GVim
Teoulas

3
สิ่งนี้จะส่งฟีดเดอร์บอร์ดไปยัง Vim เป็นอินพุตคีย์บอร์ดดังนั้นหากคุณอยู่ในโหมดปกติและวาง:!rm -rf /<cr>มันจะเรียกใช้งาน ใช้รีจิสเตอร์แทน!
lericson

4
@lericson ฉันไม่ได้พูดในคำตอบของฉันว่าสิ่งนี้มีประโยชน์สำหรับบางสิ่งที่อยู่ในแป้นพิมพ์ระบบหรือไม่ ฉันไม่เข้าใจ downvote และสำหรับตัวอย่างของคุณอย่างจริงจัง? คุณมีสิ่งนั้นในคลิปบอร์ดหรือไม่ และคุณไม่คิดว่าการพิมพ์shift-insนั้นง่ายกว่าctrl-R+*? แน่นอนว่าถ้าคุณอยู่ใน gvim ถ้าคุณอยู่ในสถานีที่เชื่อมต่อกับเครื่องอื่นและคุณต้องการวางบางสิ่งบางอย่างจากคลิปบอร์ดของคุณคุณจะรู้สิ่งที่ดีกว่าshift-ins? เพราะรีจิสเตอร์ไม่ทำงานในสถานการณ์นั้น โปรดคิดก่อนที่จะแสดงความคิดเห็นและทำสิ่งอื่น ๆ (เช่น downvoting)
skeept

ฉันคิดว่ามันเป็นข้อมูลที่ผิดและฉันได้ทำหน้าที่ในการตัดสินว่า
lericson

1
ไม่ได้ผลสำหรับฉัน ฉันเพิ่งเพิ่ม '<S-Insert>' ลงในบรรทัดคำสั่งของฉัน บางทีฉันอาจจะพลาดอะไรซักอย่าง (Ubuntu 19.04 / 2: 8.1.0320-1ubuntu3.1)
Max Waterman

39

"ฉันต้องการวางข้อความที่ดึงลงในบรรทัดคำสั่ง Vim"

ในขณะที่คำตอบที่ได้รับการโหวตสูงสุดเสร็จสมบูรณ์มากฉันชอบแก้ไขประวัติคำสั่ง

ในโหมดปกติให้พิมพ์: q:ในโหมดปกติพิมพ์:นี่จะให้รายการคำสั่งล่าสุดแก้ไขและค้นหาได้ด้วยคำสั่ง vim ปกติ คุณจะเริ่มบรรทัดคำสั่งว่างที่ด้านล่าง

สำหรับสิ่งที่แน่นอนที่บทความถามวางบรรทัด yanked (หรือ yanked อะไร) ลงในบรรทัดคำสั่งกระชากข้อความของคุณแล้ว: q:p(เข้าสู่โหมดแก้ไขประวัติคำสั่งและจากนั้น (p) ข้อความ yanked ของคุณเป็นคำสั่งใหม่ บรรทัดแก้ไขที่ต้องการenterเพื่อดำเนินการ

หากต้องการออกจากโหมดประวัติคำสั่งมันตรงกันข้าม ในโหมดปกติในประวัติคำสั่งให้พิมพ์: :q+enter


1
หากคุณกำลังแก้ไขคำสั่งที่มีอยู่แล้วและไม่ได้กด 'q:' กด ctrl + f และมันจะดึงความสามารถในการแก้ไขประวัติคำสั่ง
Clay

14

สำหรับการวางบางสิ่งบางอย่างจากคลิปบอร์ดระบบเข้าไปในบรรทัดคำสั่งที่เป็นกลุ่ม ( "โหมดคำสั่ง"), การใช้งานCtrl+ ตามด้วยR +สำหรับฉันอย่างน้อยใน Ubuntu, Shift+ Insไม่ทำงาน

PS: ฉันไม่แน่ใจว่าทำไมCtrl+ Rตามด้วย*ซึ่งในทางทฤษฎีเหมือนกับCtrl+ Rตามด้วย+ดูเหมือนจะไม่ทำงานเสมอ ฉันค้นหาและค้นพบ+เวอร์ชันและดูเหมือนว่าจะทำงานได้เสมออย่างน้อยในกล่องของฉัน


2
ความแตกต่างระหว่าง Ctrl-r + และ Ctrl-r * คือเดิมคือคลิปบอร์ดปกติ แต่ใน Linux มีคลิปบอร์ดประเภทที่สองเรียกว่า "หลัก" ที่แสดงถึงข้อความที่เลือกล่าสุด (วางเมาส์ปุ่มกลางจากนั้น) . ไม่สามารถใช้งานได้ใน Windows หรือ MAC
Matias Thayer

13

เป็นที่น่าสังเกตว่าการลงทะเบียน yank นั้นเหมือนกับบัฟเฟอร์มาโคร ในคำอื่น ๆ คุณสามารถเขียนออกคำสั่งของคุณทั้งหมดในเอกสารของคุณ (รวมถึงข้อมูลโค้ดวางของคุณ) แล้ว"byที่จะดึงเอามันไปลงทะเบียนและเรียกมันด้วยb@b


1

ฉันมีปัญหาที่คล้ายกัน ฉันต้องการให้ข้อความที่เลือกนั้นลงท้ายด้วยคำสั่ง แต่ไม่ต้องพึ่งพาการวางไว้นี่คือคำสั่งที่ฉันพยายามเขียนการแม็พสำหรับ:

:call VimuxRunCommand("python")

เอกสารสำหรับปลั๊กอินนี้แสดงโดยใช้ตัวอักษรสตริงเท่านั้น ต่อไปนี้จะแตกถ้าคุณพยายามเลือกข้อความที่มี doublequotes:

vnoremap y:call VimuxRunCommand("<c-r>"")<cr>

ในการหลีกเลี่ยงปัญหานี้คุณเพียงแค่อ้างอิงเนื้อหาของมาโครโดยใช้@:

vnoremap y:call VimuxRunCommand(@")<cr>

ส่งต่อเนื้อหาของการลงทะเบียนที่ไม่มีชื่อและทำงานร่วมกับใบเสนอราคาคู่และใบเสนอราคาแบบหลายชั้น


ฉันคิดว่าตัวอย่างสุดท้ายของคุณหายไป "บางทีคุณอาจหมายถึง VimuxRunCommand (" @ ")
kd8azz

นั่นจะส่ง@ตัวอักษรไปยังคำสั่ง vimux คิดว่าการ@หลบหนีอ้างสองต่อไปนี้และมันจะถือว่าเป็นทะเบียนแทนที่จะเป็นตัวละครปกติ vnoremapฉันได้กำหนดไว้มีการใช้งานในโหมดภาพจึง yanks ข้อความที่เลือกแล้ววางมันลงไปในคำสั่ง vimux ที่จะส่งไปยังล่ามทำงานในกรอบที่อยู่ติดกัน ยอดเยี่ยมมากสำหรับการทำงานกับสคริปต์และทดสอบส่วนเล็ก ๆ ของมันด้วยการกดแป้นสองสามครั้ง
Conrad.Dean

1

OS X

หากคุณใช้ Vim ใน Mac OS X แต่น่าเสียดายที่มันมาพร้อมกับเวอร์ชั่นเก่ากว่าและไม่ปฏิบัติตามตัวเลือกคลิปบอร์ด โชคดีที่Homebrewสามารถแก้ปัญหานี้ได้อย่างง่ายดาย

ติดตั้งเป็นกลุ่ม:

brew install vim --with-lua --with-override-system-vi

ติดตั้ง Vim เวอร์ชัน GUI:

brew install macvim --with-lua --with-override-system-vi

รีสตาร์ทเครื่องเพื่อให้มีผล


ผนวกบรรทัดต่อไปนี้ไปที่ ~/.vimrc
set clipboard=unnamed

ตอนนี้คุณสามารถคัดลอกบรรทัดใน Vim ด้วยyyและวางทั้งระบบ


1

สำหรับบริบทข้อมูลนี้มาจากการที่ไม่มีปลั๊กอินไม่มีพฤติกรรม. vimrc Vim 7.4 ใน Linux Mint ที่มีตัวเลือกเริ่มต้น

คุณสามารถเลือกข้อความด้วยเมาส์ได้ตลอดเวลา (หรือใช้Vหรือvวางการเลือกใน "* register") และวางลงในบรรทัดคำสั่งด้วยShift+ Ctrl+v +

การพิมพ์Ctrl+ rในบรรทัดคำสั่งจะทำให้พรอมต์สำหรับชื่อการลงทะเบียน ดังนั้นการพิมพ์:CTRL-r*จะวาง content register * ลงในบรรทัดคำสั่ง มันจะวางการลงทะเบียนใด ๆ ไม่ใช่แค่ "* ดู:help c_CTRL-Rดู

นอกจากนี้ปุ่มกลางของเมาส์จะวางลงในบรรทัดคำสั่ง

ดู :help->quote-plusคำอธิบายของวิธีที่ X Window เกี่ยวข้องกับการเลือก แม้ในกลุ่ม Vim แบบธรรมดา (อีกครั้งใน Vim 7.4 ใน Linux Mint อยู่แล้ว) การเลือกใด ๆ ที่ทำด้วยปุ่มซ้ายของเมาส์สามารถวางในบรรทัดคำสั่งด้วยปุ่มกลางของเมาส์

นอกจากนี้ปุ่มกลางของเมาส์จะวางข้อความที่เลือกใน Vim ลงในแอปพลิเคชั่น X Window อื่น ๆ อีกมากมายแม้แต่ GUI (เช่น Firefox และThunderbird) ) และการวางข้อความลงในบรรทัดคำสั่งก็เป็นไปได้เช่นกันเมื่อเลือกข้อความจากแอพอื่น ๆ .

ดู: help-> x11-selection สำหรับข้อมูล addl

TL; DR

ลองวิธี: CTRL-r ก่อนแล้วจึงใช้Shift+ Ctrl+ vหรือปุ่มกลางของเมาส์ถ้าคุณต้องการอย่างอื่น

ยอมรับว่ามันอาจทำให้เกิดความสับสน


0
  1. "[a-z]y: คัดลอกข้อความไปยัง [az] register

  2. ใช้:!เพื่อไปที่คำสั่งแก้ไข

  3. Ctrl+ R: ติดตามข้อมูลประจำตัวทะเบียนเพื่อวางสิ่งที่คุณคัดลอก

มันใช้กับ CentOS 7


สิ่งที่มีความหมายโดย"มันใช้กับ CentOS 7" ?
Peter Mortensen

0

หากคุณมีค่าสองค่าที่ดึงลงในสองรีจิสเตอร์ที่แตกต่างกัน (ตัวอย่างเช่นรีจิสเตอร์aและรีจิสเตอร์b) จากนั้นคุณสามารถตั้งค่าตัวแปรcและดำเนินการกับมันได้

ตัวอย่างเช่น:set c = str2float(@a) + str2float(@b)จากนั้นคุณสามารถวางเนื้อหาcได้ทุกที่

ตัวอย่างเช่นขณะอยู่ในโหมด INSERT CTRL + Rจากนั้นพิมพ์=เพื่อป้อนลงในนิพจน์เรจิสเตอร์และเพียงพิมพ์cหลังเครื่องหมายเท่ากับแล้วกด ENTER เสร็จแล้วตอนนี้คุณควรจะมีทั้งหมดaและbลงทะเบียน

สิ่งเหล่านี้สามารถบันทึกได้ในมาโครแล้วซ้ำอีก!

str2floatฟังก์ชั่นถูกใช้ถ้าคุณกำลังทำงานกับลอยถ้าคุณไม่ได้คุณจะได้รับจำนวนเต็มแทน

ฉันไม่แน่ใจว่านี่เป็นสำนวนหรือไม่ แต่มันก็ใช้ได้กับกรณีของฉันที่ฉันต้องการเพิ่มตัวเลข 2 ตัวในหนึ่งแถวและทำซ้ำอีก 500 บรรทัด

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