คำถามติดแท็ก cut-copy-paste

คำถามเกี่ยวกับการตัดการคัดลอกและการวางข้อความ ในกลุ่ม "ตัด" เรียกอีกอย่างว่า "ลบ", "คัดลอก" เรียกอีกอย่างว่า "งัด" และ "วาง" เรียกอีกอย่างว่า "วาง"


15
ฉันจะลบบล็อกข้อความขนาดใหญ่โดยไม่นับบรรทัดได้อย่างไร
ในกลุ่มฉันมักจะต้องลบหรือดึง / ใส่บล็อกข้อความขนาดใหญ่ ฉันสามารถนับบรรทัดข้อความและป้อนสิ่งที่ต้องการ50ddลบ 50 บรรทัด แต่นั่นเป็นความเจ็บปวดเล็กน้อย ฉันจะลบบล็อคข้อความขนาดใหญ่นี้ได้โดยไม่ต้องรู้ว่าต้องลบกี่บรรทัดล่วงหน้า?

3
ฉันจะดึง (คัดลอก) อักขระเดียวที่เคอร์เซอร์วางอยู่ได้อย่างไร
ฉันรู้หลายวิธีในการคัดลอกสิ่งต่าง ๆ : yiw= ดึงในคำปัจจุบัน yaw= ดึงทุกคำ (รวมถึงช่องว่างท้าย) yy = ดึงสายปัจจุบัน 3yy= ดึงสามบรรทัดที่เริ่มต้นที่ปัจจุบัน yap= ดึงทุกย่อหน้า (รวมถึงขึ้นบรรทัดใหม่) ฉันยังสามารถลบหรือเปลี่ยนอักขระเดียว: x= ลบอักขระภายใต้เคอร์เซอร์ r= แทนที่อักขระใต้เคอร์เซอร์ แต่คุณจะคัดลอกอักขระเพียงตัวเดียวในโลกได้อย่างไร? แรงจูงใจของฉันคือฉันกำลังเขียนโปรแกรมใน Perl 6 และตัวดำเนินการบางตัวเป็นอักขระ Unicode ตอนนี้ฉันกำลังใช้รหัส Perl 6 Config :: INI ของ tadzikเป็นจุดเริ่มต้นสำหรับ parser ที่กำหนดเองเช่นและฉันอยากจะคัดลอกตัวอักษรภาษาฝรั่งเศสตัวเดียว (ตัวดำเนินการไฮเปอร์)จากบรรทัดนี้ : my %hash = $<sections>».ast; ฉันสามารถใช้โอเปอเรเตอร์ไฮเปอร์เวอร์ชัน "Texas" สองตัวละคร>>แต่ฉันคิดว่ามัน>»ดูดีกว่าและคลุมเครือน้อยกว่า>>>: my %hash = $<sections>>>.ast;

4
ฉันจะย้ายเส้นได้อย่างง่ายดายได้อย่างไร?
คำสั่ง (หรือทางลัด) เพื่อย้ายบรรทัดขึ้นหรือลงในกลุ่มคืออะไร? เวิร์กโฟลว์ปัจจุบันของฉันคือการดึง (คัดลอก) บรรทัดและกว่าลบบรรทัดนั้นและแทนที่จะวาง (วาง) บรรทัดนั้น

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

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

2
ทำไม Y จึงเป็นคำพ้องความหมายสำหรับ yy แทนที่จะเป็น y $
มีเหตุผลทางประวัติศาสตร์ที่เฉพาะเจาะจงสำหรับสิ่งนี้หรือไม่? ความเป็นมา - (คุณสามารถข้ามส่วนนี้ได้หากคุณเข้าใจคำถามนี้ไปแล้ว) ในฐานะที่เป็นสื่อกลาง / ขั้นสูงviผู้ใช้จะรู้ว่าyคือ "งัดคำสั่ง" มัน yanks (สำเนา) ข้อความที่ระบุโดยคำสั่งการเคลื่อนไหวต่อไป. * ดังนั้นyeyanks ไปยังจุดสิ้นสุดของคำ, y0yanks จากตำแหน่งเคอร์เซอร์ไปยังจุดเริ่มต้นของบรรทัดy_ดึงเส้นปัจจุบันทั้งหมดy$ออกจากตำแหน่งเคอร์เซอร์จนถึงจุดสิ้นสุดของบรรทัดปัจจุบันเป็นต้น dคำสั่ง (ลบ) และcคำสั่ง (เปลี่ยนแปลง) ทั้งสองจะสามารถนำมาใช้กับทุกการเคลื่อนไหวเหล่านี้เช่นกัน ddเป็นคำพ้องสำหรับd_และลบบรรทัดปัจจุบันทั้งหมด ในทำนองเดียวกันccก็เป็นคำพ้องความหมายสำหรับc_และจะเปลี่ยนบรรทัดปัจจุบัน (เช่นมันจะลบข้อความทั้งหมดและทำให้คุณอยู่ในโหมดแทรกที่จุดเริ่มต้นของบรรทัด). ** คำสั่ง "กระชาก" เป็นไปตามอนุสัญญานี้ จะงัดบรรทัดปัจจุบันทั้งหมดเช่นเดียวกับyyy_ มีอีกหนึ่งชุดของคำพ้องความหมาย: Dเป็นคำพ้องความหมายสำหรับd$และจะลบจากตำแหน่งเคอร์เซอร์ไปยังจุดสิ้นสุดของบรรทัด Cเป็นคำพ้องความหมายc$และจะเปลี่ยนข้อความจากตำแหน่งเคอร์เซอร์เป็นจุดสิ้นสุดของบรรทัดวางคุณในโหมดแทรกเพื่อพิมพ์ข้อความใหม่ อย่างไรก็ตามYเป็นคำพ้องความหมายอื่นสำหรับyyหรือy_และจะดึงทั้งบรรทัดไม่ใช่เฉพาะจากเคอร์เซอร์จนถึงท้ายบรรทัดตามที่คุณคาดหวังจากCและDรูปแบบ ฉันเข้าใจว่าใน Vim มันถูกเก็บไว้เป็นวิธีนี้เพื่อรักษาความเข้ากันได้ย้อนหลังกับviตามที่กล่าวไว้ในความช่วยเหลือ Vim ภายใต้:help Y: หากคุณต้องการให้ "Y" ทำงานจากเคอร์เซอร์จนถึงจุดสิ้นสุดของบรรทัด (ซึ่งมีเหตุผลมากกว่า แต่ไม่รองรับ Vi) ให้ใช้ ": map Y …

4
มีวัตถุข้อความสำหรับบัฟเฟอร์ทั้งหมดหรือไม่
ฉันมักจะพบว่าตัวเองพิมพ์คำสั่งเช่นgg"+yGหรือggdGต้องการวิธีที่มีประสิทธิภาพมากขึ้นโดยไม่ต้องเลื่อนเคอร์เซอร์สองครั้ง มีคำสั่งใดบ้างที่ฉันสามารถใช้เช่นy[movement]เพื่อคัดลอกบัฟเฟอร์ทั้งหมดโดยไม่ย้ายเคอร์เซอร์?

4
วิธีการแทนที่คำด้วยคำที่ถูกดึงในโหมดปกติ
เมื่อฉันต้องแทนที่คำด้วยคำอื่นที่ฉันดึงมาก่อนฉันมักจะใช้เวิร์กโฟลว์ที่ดูเหมือนผิดธรรมชาติสำหรับฉัน: สมมติว่าฉันมีข้อความนี้: foo bar buzz และฉันต้องการดึงfooและแทนที่barด้วยสิ่งที่ฉันดึงมาก่อน หลังจาก yanking fooฉันเห็นตัวเลือกต่อไปนี้: ตัวเลือกที่ 1 วางเคอร์เซอร์barด้วยw ใส่fooด้านหน้าbarด้วยP วางเคอร์เซอร์ที่ส่วนbที่เหลือbarและลบคำด้วยde ตัวเลือก 2 วางเคอร์เซอร์บนแถบด้วย w ใช้deเพื่อลบbar ใส่เนื้อหาของการลงทะเบียน 0 ด้วย"0P(ตั้งแต่ผมลบbar, fooไม่สามารถเข้าถึงได้อีกต่อไปด้วยง่ายp) ทั้งสองวิธีดูซับซ้อนเกินไปสำหรับฉันและฉันแน่ใจว่ามีวิธีที่มีประสิทธิภาพมากขึ้นในการบรรลุการกระทำนี้ แต่ฉันไม่สามารถหาวิธีได้ pความคิดนี้จะรวมการลบและการกระทำที่ใส่ในเพียงหนึ่งหรืออย่างน้อยหลีกเลี่ยงที่จะให้คำลบในงัดลงทะเบียนเพื่อที่ฉันสามารถใส่คำที่ต้องการด้วยง่าย ฉันรู้ว่าโหมดการแทนที่ถูกกระตุ้นด้วยRแต่มันไม่อนุญาตให้ใส่สิ่งที่ถูกกระชาก TL : DR : วิธีแทนที่คำด้วยเนื้อหาของ yank register ได้อย่างไร

7
วิธีย้ายบล็อกข้อความได้เร็วขึ้น
นี่คือวิธีที่ฉันมักจะคัดลอกบล็อกข้อความหรือรหัส: เลือกบล็อกด้วยโหมด Visual ( V) และลบด้วย d; ddหรือถ้ามันเป็นเพียงบรรทัดเดียวใช้เพียง ไปที่ที่ฉันต้องการให้เป็นข้อความฉันโง่เกินกว่าที่จะจดจำความแตกต่างระหว่างpและPดังนั้นฉันจึงได้รับสิทธิ์นี้ประมาณ 50% ของเวลา (ถ้าฉันทำผิด: เลิกลองใหม่อีกครั้ง) บางครั้งการเยื้องต้องปรับดังนั้นฉันไปที่โหมด Visual Vอีกครั้งและเลือกบล็อกเดียวกันอีกครั้งและใช้>หรือ <เพื่อแก้ไข มีวิธีที่ง่ายกว่านี้ไหม? ในบรรณาธิการบางคนฉันเห็นว่าคุณสามารถ "หยิบ" บล็อกข้อความเหมือนเดิมและเลื่อนไปมาได้ นี่คือตัวอย่างจาก Emacs (แต่ฉันเคยเห็นสิ่งนี้ในบรรณาธิการอื่น ๆ ): หรืออาจมีวิธีอื่น (ดียิ่งขึ้น)

2
หนึ่งจะผนวกเข้ากับคลิปบอร์ดลงทะเบียนเป็นกลุ่มได้อย่างไร?
ฉันรู้แล้วว่าคุณสามารถคัดลอกบางสิ่งไปยังการลงทะเบียนโดยใช้: (รวมทั้งคำสั่งดึง, ลบ, ฯลฯ ) "a ฉันยังเข้าใจว่าคุณสามารถต่อท้ายการลงทะเบียนโดยใช้: "A นอกจากนี้ฉันเข้าใจวิธีการคัดลอกบางสิ่งไปยังการลงทะเบียนคลิปบอร์ดโดยใช้: "+ ฉันจะพิมพ์อะไรต่อท้ายทะเบียนคลิปบอร์ด รุ่นที่เป็นกลุ่มของฉัน: VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan 2 2014 19:39:59) Huge version with GTK2 GUI.

1
ฉันจะแมป d [นับ] d ได้อย่างไร
NB คำสั่งนี้ไม่ได้ซ้ำกับคำสั่ง "d3fg" อย่างไร โปรดอ่านก่อนลงคะแนนเพื่อปิด! ฉันได้มาบิตของอับจนในของฉันการแสวงหาที่จะได้รับการลบการทำงานเล็ก ๆ เช่นคนใหญ่ ปัญหาที่ฉันมีคือฉันไม่สามารถหาวิธีการแมปคำสั่งd3dใหม่ได้ ที่จริงแล้วฉันไม่สามารถเข้าใจได้ว่าพวกเขาทำงานอย่างไรตั้งแต่แรกและไม่พบการกล่าวถึงพวกเขาในความช่วยเหลือของ Vim * d3jตรงไปตรงมา: มันใช้dกับการ3jเคลื่อนไหว 3ddตรงไปตรงมา: มันรันddคำสั่งด้วย "count" ของ 3 d3d ดูเหมือนว่ามันควรจะตรงไปตรงมามันใช้dโอเปอเรเตอร์กับ ... แต่อะไรนะ3d? มันไม่ใช่การเคลื่อนไหว หากคุณพิมพ์3dด้วยตัวเอง Vim จะถือว่าเป็นนับตามด้วยโอเปอเรเตอร์และรออย่างอดทนสำหรับการป้อนข้อมูลเพิ่มเติม และคุณไม่สามารถใช้โอเปอเรเตอร์กับผู้ให้บริการรายอื่นได้ ddไม่ได้อธิบายไว้ในความช่วยเหลือเป็นลำดับของผู้ให้บริการสองราย มันเป็นคำสั่งสองแป้นที่แยกต่างหาก (เปรียบเทียบdcซึ่งไม่ทำอะไรเลย) นอกจากนี้ยังไม่ปรากฏว่าในกรณีที่การวางตำแหน่งการนับมีความยืดหยุ่นสำหรับคำสั่งที่ต้องใช้การกดแป้นสองครั้ง: 2gjเลื่อนเคอร์เซอร์ลงสองบรรทัดหน้าจอ แต่ละg2jทิ้งการกดปุ่มสองครั้งแรกทั้งหมดและเลื่อนเคอร์เซอร์ลงหนึ่งบรรทัด แล้วมันทำงานอย่างไร นี่เป็นกรณีพิเศษในรหัสภายในของ Vim ใช่ไหม มีวิธีใดบ้างที่ฉันสามารถสร้างการd[count]dแมปได้? แก้ไข : มันเป็นวัตถุข้อความหรือไม่ :h text-objectsไม่รวมไว้ในรายการ "คำสั่งการเลือกวัตถุข้อความ" แต่จะรวม dd ในรายการการลบ "จัดกลุ่มจากวัตถุขนาดเล็กไปจนถึงวัตถุขนาดใหญ่" และd2awจะลบคำที่อยู่ใต้เคอร์เซอร์และคำต่อไปนี้ …

4
วิธีการแทนที่ข้อความภายในด้วยข้อความที่ดึงออก
รูปแบบการแก้ไขที่ฉันพบบ่อยคือ: ฉันต้องการดึงชิ้นส่วนของข้อความในเครื่องหมายคำพูดหรือวงเล็บปีกกาและแทนที่ส่วนของข้อความนั้นในเครื่องหมายคำพูด / วงเล็บคู่อื่น ตัวอย่างเช่นถ้าฉันต้องการคัดลอกชื่อคลาสfoo barและวางที่อื่น: <span class="foo bar"> <div class="this-should-be-replaced-with-foo-and-bar"> สิ่งที่ฉันรู้คือสิ่งนี้: ถ้าฉันย้ายเข้าไปในชั้นเรียนช่วงที่ฉันใช้yi"ในการดึงข้อความภายในคำพูด ตอนนี้ฉันมีสิ่งนี้ในทะเบียนของฉันดังนั้นฉันควรจะสามารถแทนที่เนื้อหาคลาสของ div ด้วย แต่ฉันไม่สามารถหาวิธีที่สะดวกในการทำเช่นนี้ หากฉันใช้ciwสิ่งนี้จะเป็นการเขียนทับการลงทะเบียนด้วยเนื้อหาที่จะเปลี่ยนแปลงดังนั้นฉันจึงหลวมข้อความที่ดึงออก สิ่งที่ดีที่สุดที่ฉันสามารถขึ้นมาจะย้ายไปอ้างเป็นครั้งแรกของการเรียนของ div ตีแล้วลบที่จะพูดต่อไปด้วยpdt" โดยปกติแล้วฉันจะทำให้ตำแหน่งของฉันแย่ลงและฉันก็วางไว้ที่ไหนสักแห่งภายในเครื่องหมายคำพูดที่รวมสองสายเข้าด้วยกันและมันก็ทำให้สิ่งต่าง ๆ สับสน ฉันหวังว่าจะมีวิธีใดที่จะทำชุด "แทนที่ข้อความภายในด้วยเนื้อหาที่ดึงของฉัน" เพื่อให้ง่ายขึ้น

4
ลบจากเคอร์เซอร์จนถึงการเกิดที่ n ของอักขระ x
ฉันรู้ว่าฉันสามารถลบได้จากเคอร์เซอร์จนถึงและรวมถึงการเกิดขึ้นครั้งแรกของตัวละครxด้วยd/x<CR>หรือv/x<CR>dถ้าฉันต้องการที่จะเห็นการเลือกก่อนแล้วจึงลบ ฉันจะลบออกจากตำแหน่งเคอร์เซอร์ปัจจุบันจนถึงเหตุการณ์ที่nของx ได้อย่างไร? เช่นถ้าเคอร์เซอร์อยู่หลังช่องว่างแรกใน yada yada yada yada yada yada x yada yada yada yada x yada yada yada yada x xx และผมพิมพ์คำสั่งที่จะลบได้ถึงสามxความต้องการผลที่ได้จะเป็น: ญาดา xx

1
“ dap” ลบทุกอย่างหรือไม่
ฉันคุ้นเคยกับคำสั่ง "dd" และ "d {motion}" แต่ไม่พบ "dap" ใน help.txt ของ vim "dap" ทำอะไรในโหมดปกติและเพราะอะไร (อีกวิธีหนึ่งฉันจะค้นหาสิ่งนี้ได้ด้วยตัวเองอย่างไร)

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