ฉันสามารถเร่งความเร็วการวางเป็นกลุ่มได้หรือไม่


12

ฉันคัดลอกส่วนหนึ่งของ HTML ออกจากหน้าเว็บและต้องการบันทึกไว้ในไฟล์ สำหรับการที่ฉันเริ่มvim เซสชั่นใหม่ในหน้าต่างเทอร์มินัลโดยมีชื่อไฟล์ (ใหม่) ที่ระบุใน commandline กดiเพื่อเข้าโหมดแทรกจากนั้นCtrlShift+ Vและรอขณะที่[-- INSERT --]แสดงที่ด้านล่างและรอ ...

เนื่องจากvimไม่ตอบสนองหลังจากผ่านไปหลายวินาทีฉันจึงเปิด 'ตัวแก้ไขข้อความ' จากเมนูแอปพลิเคชัน→ Accessoiries วางข้อความ (ซึ่งปรากฏขึ้นภายในเสี้ยววินาทีที่บันทึกไว้ภายใต้ชื่อใหม่ปิดและฆ่าเซสชัน Vim ที่ ยังไม่เสร็จภายใน 1.5 นาทีต่อมาปริมาณของข้อความคือ 186K ใน 3200 บรรทัดไม่มากเกินไปที่ฉันจะพูดและไม่ยาวเกินไป

มีวิธีในการเพิ่มความเร็วของการแทรกเหล่านี้ในvimและ / หรือมีคำอธิบายว่าทำไมจึงช้าเมื่อเทียบกับการใช้ตัวแก้ไขข้อความที่น่ากลัวและวางเมาส์?

(% CPU ตามที่topไม่ได้สูงกว่า 5% แม้ว่าฉันจะมีโปรเซสเซอร์บางตัวฟรีในระบบดังนั้นมันอาจเป็นปัญหาของ I / O ที่ถูกผูกไว้ซึ่งไม่มีอยู่เมื่ออ่านข้อความเดียวกันจากไฟล์)

ข้อมูลรุ่น:
Ubuntu 12.04
Vim: 7.3 พร้อมแพตช์ตามที่จัดทำโดย Ubuntu 12.04
bash: 4.2.25
gnome-terminal: 3.4.1.1


1
ฉันคิดว่ามันช้า b / c ต้องแยกวิเคราะห์อินพุตและลองจัดรูปแบบ ฯลฯ ฉันไม่แน่ใจว่าตัวเลือกในการทำเช่นนี้ แต่จะสมมติว่าคุณสามารถปิดใช้งานคุณลักษณะนั้นได้ชั่วคราว / vimวางทำแล้ว เปิดใช้งานอีกครั้ง ลองใช้:set pasteคุณสมบัติเพื่อดูว่ามันช่วยปรับปรุงสิ่งต่าง ๆ หรือไม่ ดู:help pasteมันอธิบายถึงวิธีที่vimทำให้ไม่มีความแตกต่าง b / w การพิมพ์และการวาง
slm

ฉันคาดว่าviจะพยายามแยกไฟล์เมื่ออ่านใน (หลังจากบันทึกวิธีที่แนะนำ @ l0b0) เช่นกัน แต่มันก็ใช้งานได้เร็ว
Anthon

จริง แต่ฉันคิดว่ามันจะต้องแยกวิเคราะห์ทุกอย่างที่มีการแยกวิเคราะห์ + ตัวละครใหม่ในขณะที่คุณกำลังวางมันดูเหมือนจะเป็นสิ่งที่เกิดขึ้นเมื่อคุณแก้ไขไฟล์ในระดับหนึ่ง
slm

:set pasteดูเหมือนจะไม่ได้จริงๆสร้างความแตกต่าง (ฉันไม่ได้ใช้นาฬิกาจับเวลาเพียงผนังนาฬิกา)
Anthon

ตกลงเป็นเพียงความคิด ...
slm

คำตอบ:


14

ประหยัดมากของข้อความคลิปบอร์ดเป็นไฟล์ได้อย่างรวดเร็วคุณสามารถเรียกใช้cat > file.txtวางเนื้อหาจากนั้นกดปุ่ม-Ctrld

หากคุณติดตั้งxselอยู่คุณสามารถ:r !xselแทรกตัวเลือก "primary" (aka. "mouse") ใน Vim หรือ:r !xsel -bแทรก "คลิปบอร์ด" ( Ctrl- c) บัฟเฟอร์ได้ นอกจากนี้คุณยังสามารถบันทึกการเลือกโดยตรงไปยังไฟล์ที่มีหรือxsel >file.txt xsel -b >file.txtสิ่งนี้จะช่วยลดความจำเป็นในการดำเนินการวาง + EOF แยกจากกันและหลีกเลี่ยงการพิมพ์บัฟเฟอร์การคัดลอกทั้งหมดในเทอร์มินัล

หากคุณไม่มี xsel แต่ xclip คำสั่งที่เกี่ยวข้องจะใช้xclip -outสำหรับการเลือกหลักหรือxclip -out -selection clipboardสำหรับบัฟเฟอร์คลิปบอร์ด


1
ขอบคุณที่อย่างน้อยทำงานโดยไม่ต้องเปลี่ยนกลับเป็นเมาส์และการแทรกไฟล์เป็นกลุ่ม (เช่นเมื่อฉันไม่ได้เริ่มต้นด้วยไฟล์เปล่า) นั้นเร็วพอ
Anthon

ฉันไม่เข้าใจว่าทำไมสิ่งนี้จึงไม่สามารถผูกกับ ctrl + shift + v ไม่มีเหตุผลในเรื่องนี้
mchid

2

นี่เป็นปัญหาที่ฟลัชบัฟเฟอร์ลงดิสก์ Vim พยายามทำให้งานของคุณปลอดภัยและไม่คิดว่าคุณสามารถพิมพ์ได้หลายพันตัวอักษรต่อวินาที อ่าน:help swap-fileรายละเอียดบางอย่างเกี่ยวกับการบัฟเฟอร์ วิธีแก้ไขปัญหาของคุณคือ:

ปิด swapfile ของกลุ่มด้วย:

vim -n <your file>

หรือจากภายในกลุ่มก่อนที่จะวาง:

:set noswapfile

ดู:help swapfileรายละเอียดเพิ่มเติมได้ที่

อีกตัวเลือกหนึ่งคือเพียงแค่ปิดการซิงค์กับดิสก์ของไฟล์ swap ด้วย:set swapsync=แต่ตัวเลือกนี้ใช้การกดแป้นมากกว่าเพื่อเลิกทำและฉันขี้เกียจ :)

การปิดสวิตช์ไม่ปลอดภัยสำหรับการทำงานปกติ! ทันทีหลังจากวางให้ใช้:set swapfileหรือ:set swapsync=fsyncเปลี่ยนกลับสู่ลักษณะการทำงานปกติ (แม้ว่าในทางเทคนิคแล้วการทำงานปกติอาจซิงค์และไม่ใช่fsyncให้ตรวจสอบด้วย:set swapsync?ล่วงหน้าหากคุณต้องการใช้เส้นทางนี้)


1
สิ่งนี้ไม่ได้เร่งความเร็วให้กับฉัน ...
elig

1

หากคุณมีxterm_clipboardคุณสมบัติคุณสามารถใช้*และ+ลงทะเบียน อินเตอร์เฟสเหล่านี้จะลงทะเบียนด้วยบัฟเฟอร์การเลือกหลัก X11 และคลิปบอร์ด (ตามลำดับ)

ดังนั้นหากคุณได้คัดลอกบางสิ่งบางอย่างผ่านCTRL+ คุณสามารถวางไว้ในกลุ่มด้วยc"+p

"*pหากคุณได้เน้นเพียงแค่การได้โดยไม่ต้องคัดลอกคุณสามารถวางมันด้วย
คุณสามารถทำให้*บัฟเฟอร์เป็นบัฟเฟอร์เริ่มต้น:set clipboard=unnamedได้ จากนั้น yank ( y), paste ( p) ฯลฯ ที่ไม่ได้ระบุการลงทะเบียนจะใช้การ*ลงทะเบียน เพิ่ม 7.3.74 เป็นกลุ่มclipboard=unnamedplusซึ่งจะใช้การ+ลงทะเบียนตามค่าเริ่มต้น

นอกจากนี้คุณยังสามารถคัดลอกสิ่งที่เป็นตัวเลือกและคลิปบอร์ดหลักบัฟเฟอร์โดย yanking "+yyตัวอย่างเช่น:

 

โปรดทราบว่าความสามารถเหล่านี้จำเป็นต้องใช้xterm_clipboardคุณสมบัติดังกล่าว คุณสามารถดูว่าคุณมีคุณสมบัตินี้โดยการทำ:versionภายในกลุ่มหรือจากเชลล์และมองหาvim --version +xterm_clipboardถ้ามันบอกว่า-xterm_clipboardคุณไม่ได้มีและจะต้องคอมไพล์เป็นกลุ่ม


ฉันไม่มีคุณสมบัตินั้น การคอมไพล์ซ้ำอีกครั้งจะช่วยได้เป็นกลุ่มแม้ไม่ได้ทำงานภายใต้ xterm (ฉันกำลังใช้ gnome-terminal)
Anthon

@Athon หากคุณใช้ GUI VIM ฉันเชื่อว่าการลงทะเบียนจะเปิดใช้งานด้วย xterm_clipboardเฉพาะเมื่อเรียกใช้ vim จากเทอร์มินัล
แพทริค

นี่คือข้อความเท่านั้นไม่ GUI VIM xtermแต่ไม่ได้วิ่งออกมาจาก
Anthon

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