ฉันจะเลือกข้อความทั้งหมดใน Vi / Vim ได้อย่างไร


193

การใช้เครื่องมือ VI เพื่อแก้ไขไฟล์กำหนดค่า

ฉันจะเลือกข้อความทั้งหมดในไฟล์ (ประมาณ 1,000 บรรทัด) คัดลอกแล้ววางลงใน Google เอกสารได้อย่างไร

คำตอบ:


158

วิธีที่ง่ายที่สุดและเร็วที่สุดคือการใช้: : % y +จากนั้นไปที่ Google เอกสาร (หรือที่ใดก็ได้) แล้ววาง คำอธิบาย:

  • % เพื่ออ้างถึงคำสั่งถัดไปเพื่อทำงานกับทุกบรรทัด
  • y  เพื่อดึงเส้นเหล่านั้น
  • +  เพื่อคัดลอกไปยังคลิปบอร์ดของระบบ

อีกวิธีคือg g " + y Gแต่คุณอาจยอมรับว่าข้างต้นนั้นเร็วและง่ายขึ้น


10
@Tuxmentat คุณช่วยอธิบายสิ่งที่แต่ละคีย์ทำได้:%y+
Jas

10
คำตอบนี้จะดีกว่าถ้ามันอธิบายสิ่งที่แต่ละคีย์ทำสำหรับทั้งสองลำดับ
AsksAnyway

6
การเดาที่ดีที่สุดของฉัน: ':' หมายถึงเรากำลังใช้คำสั่ง "โหมด ex" (ฉันคิดว่า) อย่างไรก็ตามมันเป็นคำสั่ง '%' เป็นตัวระบุช่วงบรรทัดคำสั่งพิเศษซึ่งระบุไฟล์ทั้งหมด 'Y' yanks ทุกอย่างและ '+' ระบุลงทะเบียนคลิปบอร์ด : ช่วย <command> ช่วยให้ฉันเข้าใจสิ่งนี้
Hawkeye Parker

11
ฉันต้องทำอะไรผิดไป ฉันพิมพ์:%y+แล้วฉันจะได้E488: Trailing characters
johny ทำไม

25
ฉันได้รับ "E850: ชื่อลงทะเบียนไม่ถูกต้อง" วิธีที่สองทำงานได้ดีสำหรับการคัดลอก แต่ไม่ได้ไปที่คลิปบอร์ดของระบบบน Ubuntu 16.04 (สำหรับฉันอย่างน้อย --- ฉันมี. vimrc ที่อาจส่งผลต่อสิ่งต่าง ๆ )
EntangledLoops

95

คำตอบที่ได้รับจำนวนมากยังดึงการเลือกซึ่งฉันไม่ได้มองหา

ฉันใช้ggVGเพื่อจุดประสงค์นี้ (ต้องทำงานในโหมดปกติ) คำสั่งนี้เพียงเลือกข้อความทั้งหมดภายในเอกสาร

ฉันได้แมปใหม่Ctrl+Aเพื่อจุดประสงค์นี้เนื่องจากฉันไม่ต้องการเพิ่มจำนวนเต็มด้วยทางลัด ( Ctrl+Aแผนที่เริ่มต้น)

เพียงเพิ่มลงในของคุณ.vimrc:

map <C-a> <esc>ggVG<CR>

มันมี<esc>ก่อนเพื่อให้แน่ใจว่าผู้ใช้อยู่ในโหมดปกติ


2
สิ่งที่ฉันกำลังมองหาและเป็นเรื่องดีที่ได้เห็นว่า Ctrl + A ไม่ได้เป็นกลุ่มโดยค่าเริ่มต้น หวังว่าจะไม่มีผลข้างเคียง
Nikos Alexandris

2
ฉันใช้เป็นการส่วนตัวggVGแต่gg0vG$อาจเหมาะสมกว่าเนื่องจากจะทำซ้ำการดำเนินการ Ctrl + A 'ปกติ' อย่างใกล้ชิดยิ่งขึ้น
Sheharyar

39

คุณสามารถใช้cat fileแล้วเลือกเอาท์พุทและคัดลอกและวางหากคุณต้องการวางลงในเบราว์เซอร์ของคุณ

สำหรับ vi นี่คือวิธีที่คุณสามารถเลือกข้อความทั้งหมดและเขียนลงในไฟล์ใหม่:

shift v  -- visual mode
shift g -- jump to eof
"*y -- yank select text
:e my_new_file -- create a new file
"*p -- paste into a new file

ในทางทฤษฎีสิ่งนี้ควรใช้กับทั้ง Linux และ Windows - ฉันลองใช้งานบน Mac แต่ไม่ได้ผล


1
เพื่อวางลงในเว็บเบราว์เซอร์cat fileเป็นวิธีที่จะไป shift vวิธีการเดียวที่จะสำเนา buffer ภายใน Vi ของ
Aleksandr Levchuk

ไม่ใช่ถ้าคุณใช้คลิปบอร์ดของระบบที่ใช้ * registry - แต่มันใช้งานได้กับ X เท่านั้นและฉันได้ยินบน windows - ดังนั้นถ้าคุณต้องการ -X คุณต้องใช้ -X - เพื่อตรวจสอบว่า vim รองรับสิ่งนี้ใน vim -: set คลิปบอร์ด + = ไม่มีชื่อ

มีทางเลือกอื่นในการทำเช่นนี้โดยไม่ต้องสร้างไฟล์ใหม่หรือไม่หากเราทำการแก้ไขสดๆบนเซิร์ฟเวอร์เราจำเป็นต้องเก็บรหัสสำรองไว้ในเครื่องของเราเพื่อให้เราสามารถย้อนกลับได้
NJInamdar

+1 สำหรับแมวและเลือกเป็นผงสำหรับอุดรู แน่นอนว่าจะไม่ทำงานกับไฟล์ขนาดใหญ่และไม่ใช่วิธีที่ใช้ง่ายที่สุด แต่สำหรับการคัดลอกไฟล์สคริปต์ขนาดเล็กที่อยู่นอกวิวพอร์ตของหน้าจอนั้นดี
Arnis Juraga


7

gg"+yG

หรือ

gg"*yG

ขึ้นอยู่กับว่า + หรือ * เป็นคลิปบอร์ดของระบบ (ในระบบยูนิกซ์จำนวนมาก + เป็นบัฟเฟอร์การเลือกเมาส์สำหรับการคลิกเมาส์กลางและ * เป็นคลิปบอร์ดระบบ)


1
ฉันคิดว่าเป็นวิธีอื่น: "* เป็นการเลือกและ" + คือคลิปบอร์ด vimdoc.sourceforge.net/htmldoc/gui_x11.html#x11-selection
Mikel

คุณถูก. ฉันก็รู้เช่นกัน แต่พิมพ์สิ่งผิด ☹
frabjous

7

ฉันใช้ Vim 7.4 ในสภาพแวดล้อม CentOS-7 ซึ่งทำให้ฉันเลือกข้อความทั้งหมดได้

:%y

จากนั้นpในไฟล์ถัดไปที่ฉันต้องการคัดลอกแบบเต็ม

หรือ

คุณสามารถใช้คำสั่ง cat

cat copyfile > pastefile

repo gitนี้มีคำสั่งที่เป็นประโยชน์อื่น ๆ ด้วย


3

สำหรับ Mac ให้ใช้ pbcopy (สำเนากระดาษทำสำเนา):

cat file.txt | pbcopy

ขณะนี้เนื้อหาของ file.txt อยู่บนคลิปบอร์ดเพื่อวางลงในแอปพลิเคชันอื่น (เช่นเบราว์เซอร์)

คุณยังสามารถวางเนื้อหาของคลิปบอร์ดลงในไฟล์โดยใช้ pbpaste:

pbpaste > file.txt

แม้ว่าจะไม่เกี่ยวข้องกับ vi โดยเฉพาะ แต่จะบรรลุเป้าหมายเดียวกันบน Mac


1

หากคุณใช้เดสก์ท็อป linux คุณสามารถโหลดลงในคลิปบอร์ดโดยใช้ xclip หรือ xsel สำหรับสิ่งที่มีขนาดที่คุณอาจต้องการใช้คุณลักษณะการอัปโหลดใน Google เอกสาร


1

อีกวิธีคือ:

คุณกดvปุ่มบนแป้นพิมพ์และเปลี่ยน VIM เป็น VISUAL

จากนั้นเลือกข้อความทั้งหมดโดยเลื่อนลง

^+ INSERTเพื่อคัดลอก

SHIFT+ INSERTเพื่อวางข้อความทุกที่ที่คุณต้องการบน Google เอกสาร



0

ดูhttp://vim.wikia.com/wiki/Accessing_the_system_clipboardสำหรับตัวเลือกเกี่ยวกับวิธีการทำเช่นนี้ (ถ้าเรียบเรียงใน "* ควรอ้างอิงถึงคลิปบอร์ดของระบบ) นอกจากนี้ยังมีคำแนะนำสำหรับการใช้ xsel กับ vim


"* คือสิ่งที่ถูกเลือกและ" + คือสิ่งที่ถูกคัดลอก vimdoc.sourceforge.net/htmldoc/gui_x11.html#x11-selection
Mikel

0

ใช้คำสั่งดังต่อไปนี้

cat <your file name>

มันจะสะท้อนเนื้อหาของไฟล์ ตอนนี้เลือกเลื่อนคัดลอกและวาง
จบเกม

อดีต .:

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