Vi & Vim

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

2
ไปที่ X ไบต์จากที่นี่
ฉันจะย้าย X ไบต์ไปข้างหน้าโดยเริ่มจากตำแหน่งเคอร์เซอร์ปัจจุบัน (รวมถึงตัวแบ่งบรรทัด) ได้อย่างไร [count]goสามารถใช้เพื่อเลื่อนไปข้างหน้า X ไบต์จากจุดเริ่มต้นของบัฟเฟอร์ ฉันลองShift + V, G, [count]go(สมมติว่า[count]goจะเริ่มนับจากจุดเริ่มต้นของการเลือกของฉัน) แต่น่าเสียดายที่ไม่ได้ผลเช่นกันเพราะgoเริ่มนับจากจุดเริ่มต้นของบัฟเฟอร์เท่านั้น ฉันยังมีความพยายาม:set rulerformat=%oที่จะแสดงไบต์ชดเชยในปัจจุบัน (แนะนำโดยกระโดดไปไบต์ชดเชยและการแสดงในฐานะไบต์ชดเชย ) [count]goเพิ่มตัวเลขในหัวของฉันและออกในที่สุด ใช้งานได้ แต่มันใช้ไม่ได้จริง ...

1
ฉันจะป้องกัน (หรืออย่างน้อยพร้อมท์เพื่อยืนยัน) จำนวนมากอย่างไร้เหตุผลจากการใช้คำสั่งคำนำหน้าได้อย่างไร
มันไม่ได้เกิดขึ้นบ่อยเท่าที่คุณคิด แต่มันเกิดขึ้นเป็นครั้งคราวและฉันก็ไม่ได้เป็นเจ้าของแมว โดยทั่วไปถ้าคุณบดแถวหมายเลขหรือ numpad จากนั้นกด keycombo ที่เรียกคำสั่งที่ทำซ้ำได้คุณสามารถสั่ง Vim โดยไม่ตั้งใจเพื่อทำงานหลายพันล้านหรือแม้กระทั่งพันล้านครั้ง สิ่งนี้จะควบคุมไม่ได้ง่ายและอาจทำให้ข้อมูลสูญหายได้ ดังนั้นฉันสงสัยว่ามีการกำหนดค่าหรือบางสิ่งในซอร์สโค้ดที่เราสามารถเปลี่ยนเพื่อทำหน้าที่เป็นการตรวจสุขภาพจิตเพื่อป้องกัน DoS ประเภทนี้หรือไม่

1
อาร์กิวเมนต์เสร็จสมบูรณ์สำหรับหลาม
มีวิธีในการรับอาร์กิวเมนต์สำหรับ python หรือไม่? ขณะนี้ฉันกำลังใช้การรวมกันของ ctags, python-mode และ YouCompleteMe แต่ฉันขาดฟังก์ชั่นในการเติมข้อความโดยอัตโนมัติของข้อโต้แย้งของฟังก์ชั่น (หรือแสดงอย่างน้อยที่สุด) มีปลั๊กอินที่รองรับหรือไม่ ฉันใช้ vim / gvim 7.4 และ Ubuntu 14.04

2
ปัญหา: การเคลื่อนย้ายเส้นแนวตั้งจะเป็นการพับในแนวตั้ง
เมื่อฉันย้ายเส้นที่มีm(เช่น:m+1) รอยพับของฉันทั้งหมดจะถูกปิด ฉันสามารถเปิดฝาพับได้zvอีกครั้งและเคอร์เซอร์จะอยู่ในตำแหน่งที่ฉันเลื่อนไป ฉันใช้การพับด้วย{{{ }}}เครื่องหมายและมีset foldmethod=markerใน. vimrc ของฉัน ฉันจะป้องกันเสียงเรียกเข้าไม่ให้ปิดการพับเมื่อเคลื่อนที่เป็นเส้นได้อย่างไร
9 folding 

1
คำแนะนำหลายบรรทัด
มีวิธีแยกคำสั่งหนึ่งบรรทัดออกเป็นหลายบรรทัดหรือไม่? ตัวอย่างเช่นฉันต้องการแปลง setlocal variable_name = condition1 ? "1" : condition2 ? "0" : condition3 ? "a long string" : "another long string" เข้าไป setlocal variable_name = condition1 ? "1" : condition2 ? "0" : condition3 ? "a long string" : "another long string" แต่เมื่อฉันลองมันเหมือนด้านบนมันเกิดข้อผิดพลาด "อาร์กิวเมนต์ไม่ถูกต้อง"
9 vimscript 

4
ฉันสามารถใช้“ gf” (หรือคล้ายกัน) เพื่อเปิดไฟล์และข้ามไปที่คำค้นหาได้หรือไม่?
มีวิธีgfรับคำสั่งเป็นกลุ่ม(หรือคล้ายกัน) เพื่อรับรู้+{cmd}อาร์กิวเมนต์สำหรับเส้นทางไฟล์หรือไม่ หนึ่งสามารถเริ่มต้นเป็นกลุ่มและไปที่คำค้นหาโดยตรงโดยทำ: $ vim +/coding_effort ~/project/file ในทำนองเดียวกันในโหมดคำสั่งคุณสามารถทำได้: :e +/coding_effort ~/project/file ฉันมักจะจดบันทึกและอ้างถึงไฟล์อื่นเช่นนี้ For more info see +/coding_effort ~/project/file where there's a detailed discussion. ฉันชอบที่จะสามารถเลือก+/coding_effort ~/project/fileพิมพ์สิ่งที่ชอบgfและมีความสุขที่ได้ทำสิ่งที่ถูกต้อง

1
ฉันจะ จำกัด จำนวนคำแนะนำเมื่อใช้ YouCompleteMe ได้อย่างไร
ฉันกำลังทำงานกับ codebase php ที่ค่อนข้างใหญ่ (โค้ดประมาณ 1.3 ล้านบรรทัด) ฉันได้สร้างแท็กและตอนนี้เมื่อฉันพิมพ์บางอย่างเช่น $data-> YouCompleteMe ล่าช้าอย่างหนักและค้าง Vim เมื่อพยายามดึงรายการความสำเร็จที่เป็นไปได้ทั้งหมดจากแท็ก มีวิธีแก้ไขปัญหานี้หรือไม่? ตัวอย่างเช่นโดย จำกัด จำนวนคำแนะนำเช่นแสดงเพียง 10 คำแนะนำยอดนิยมแทนที่จะโหลดรายการทั้งหมด

3
วิธีการส่งออกเน้นรหัสแหล่งที่มาเป็นไฟล์ที่จะใช้เป็นกลุ่มนอก
ที่ทำงานของฉันฉันต้องการนำเสนอภาษาที่กำหนดเองที่ฉันพัฒนาขึ้นเพื่อแก้ปัญหาบางอย่างที่เรามี เพื่อการพัฒนาที่ง่ายขึ้นฉันสร้างไฟล์ไวยากรณ์ของตัวเองสำหรับภาษานี้โดยเฉพาะ ตอนนี้ฉันต้องนำเสนอบนคอมพิวเตอร์เครื่องอื่นที่จะไม่มีไฟล์ไวยากรณ์ สำหรับทุกอย่างที่ฉันรู้มันอาจไม่ได้ติดตั้งเป็นกลุ่ม (แต่ฉันก็สงสัย) มันจะสมบูรณ์ถ้าฉันสามารถless -rใช้ไฟล์เพื่อให้ได้ไวยากรณ์เดียวกันโดยเน้นที่ฉันทำบนคอมพิวเตอร์ของฉันเอง อย่างไรก็ตามฉันไม่ทราบวิธีคัดลอกและวางในขณะที่รักษาสี (ในเทอร์มินัลจากคำพังเพยบนเดเบียน) หรือวิธีการส่งออกไฟล์ด้วยไวยากรณ์ที่เน้นเป็นตัวควบคุม raw จากกลุ่ม ฉันมีความมั่นใจมากขึ้นในการหาวิธีแก้ปัญหาจากเสียงเรียกเข้า แต่ฉันไม่รู้ว่าจะทำอย่างไร คุณรู้วิธีที่จะส่งออกไฟล์ที่คุณเปิดด้วยการเน้นไวยากรณ์ของมันเป็น ANSI raw-control-chars ในไฟล์อื่นหรือไม่?

2
การนำทางรหัสโครงการโดยไม่ต้องใช้คำสั่งภายนอก
ฉันพยายามรวบรวมกล่องเครื่องมือของคำสั่ง / แบบสอบถาม Vim, ในคำสั่งหรือโหมดการค้นหา, สำหรับการนำทางรหัสฐานโดยไม่ต้องใช้ Ctags หรือเครื่องมือภายนอกอื่น ๆ Ctags นั้นยอดเยี่ยม แต่การสนับสนุนอาจแตกต่างกันไปตามสภาพแวดล้อมการพัฒนาที่คุณติดอยู่ ฉันต้องการเพียงแค่พึ่งพาความรู้ Vim
9 search  ide 

4
จะลบเนื้อหาย้อนหลังจนถึง“ =” ที่บรรทัดก่อนหน้าได้อย่างไร
ฉันใช้ตัวอย่างรหัสจาวาสคริปต์: 1 var a = 1; 2 var b = |{}; เคอร์เซอร์อยู่ที่ตำแหน่ง|(บนตัวอักษร "{" เมื่อรูปร่างเคอร์เซอร์เป็นบล็อก) ฉันพบว่าฉันต้องการaกำหนดวัตถุให้ฉันจึงต้องการแก้ไขตามด้านล่าง: 1 var a = {}; ดังนั้นฉันต้องการทราบว่าเมื่อเคอร์เซอร์อยู่ที่ "{" วิธีการลบเนื้อหาทั้งหมดก่อน "{" อย่างรวดเร็วจนกระทั่งช่องว่างหลังเครื่องหมาย "=" ที่บรรทัดที่ 1 ในเครื่องมือแก้ไขทั่วไปอื่น ๆ ฉันจะกดปุ่ม backspace เพื่อลบรหัส แต่ฉันไม่สามารถทำสิ่งนี้ได้เป็นกลุ่ม

2
ฉันจะสร้างโหมดการแทรกหลอกด้วยคีย์แมปอื่นได้อย่างไร
ฉันอยู่ในตำแหน่งที่ผิดปกติเล็กน้อยเมื่อใช้รูปแบบแป้นพิมพ์สองแบบที่แตกต่างกันเป็นประจำ ( โปรแกรมเมอร์ - DvorakและTurkish-F ) เลย์เอาต์เหล่านี้ค่อนข้างจะแตกต่างจากกันและฉันสามารถมีความเชี่ยวชาญเป็นกลุ่มด้วยความทรงจำของกล้ามเนื้อหนึ่งชุด ฉันค่อนข้างชำนาญในการใช้คำสั่ง vim ในเค้าโครง Dvorak แต่แทบจะเป็นไปไม่ได้เลยที่จะใช้ถ้าแป้นพิมพ์ของฉันอยู่ในรูปแบบ Turkish-F น่าเสียดายที่ฉันแก้ไขไฟล์เป็นประจำทั้งภาษาอังกฤษและตุรกีและแม้แต่ภาษาผสม ความสามารถของฉันเป็นเช่นนั้นฉันสามารถพิมพ์ภาษาใดก็ได้ในรูปแบบแป้นพิมพ์ตามลำดับ แต่สมองของฉันปฏิเสธที่จะไขว้พวกเขาและพิมพ์แม้แต่ตัวอักษรสองสามคำในภาษาตุรกีจากเค้าโครง Dvorak หรือในทางกลับกัน ฉันมีการผูกสองปุ่มเพื่อแสดงความยินดีสำหรับการเปลี่ยนเลย์เอาต์ใน Xorg แต่สิ่งนี้ทำให้ฉันมีเวิร์กโฟลว์ที่น่าอึดอัดใจในกลุ่มเมื่อแก้ไขไฟล์ภาษาแบบผสม: <vim commands…>i<switch to tr>…content…<escape><switch to en><vim commands…> ฉันอยากจะตัดทอนสิ่งนี้ให้สั้นลงเช่น: <vim commands…><leader>i…content…<escape><vim commands…> ... เช่นการใช้<leader>iชุดของ:imapค่าเพื่อเลียนแบบเค้าโครงภาษาตุรกีโดยไม่เปลี่ยนเค้าโครงแป้นพิมพ์ของระบบ ในเวลาเดียวกันiจะเปลี่ยนเป็นโหมดแทรก แต่ไม่มี:imapค่าเพิ่มเติม คุณค่าของตัวเองนั้นง่ายฉันแค่ต้องการการแมปตัวอักษรแบบนี้: :imap a u :imap A U :imap o i :imap O İ "etc. …

3
ปิดบัฟเฟอร์ที่เก่าที่สุดโดยอัตโนมัติหรือไม่
ฉันต้องการแก้ไขไฟล์จำนวนมากเมื่อเร็ว ๆ นี้เพื่อให้การเปลี่ยนแปลงเล็กน้อยในแต่ละไฟล์ ในการเข้าถึงแต่ละไฟล์ฉันเรียกดูผ่าน NERDtree และเปิดไฟล์หนึ่งไฟล์หลังจากนั้นอีกหนึ่งไฟล์ เมื่อฉันเปิดไฟล์มากขึ้นเรื่อย ๆ ฉันสังเกตว่าการใช้หน่วยความจำของฉันเพิ่มขึ้นเป็นจำนวนมาก เสียงเรียกเข้าปิดให้ฉันหน่วยความจำมากมายกลับ ฉันติดตั้งปลั๊กอินค่อนข้างน้อย แต่ฉันคิดว่าเหตุผลที่การใช้งานหน่วยความจำของฉันเพิ่มขึ้นอย่างมากเนื่องจากจำนวนบัฟเฟอร์ที่ฉันเปิดหลังจากการแก้ไขไม่กี่ครั้ง มีวิธี จำกัด จำนวนของบัฟเฟอร์ที่ vim ที่อนุญาตให้เปิดในครั้งเดียวโดยอัตโนมัติปิดบัฟเฟอร์เก่าที่เกี่ยวข้องกับการแก้ไขเวลาหรือไม่
9 buffers 

1
มีวิธีเขียนผลลัพธ์ของ“: ls” ไปยังไฟล์หรือไม่?
ฉันได้แยกไฟล์ออกเป็นจำนวนมากในขณะนี้และใช้เวลาสักครู่ในการค้นหาไฟล์เหล่านี้ มีคำสั่ง:ls > /tmp/filelistที่จะเขียนแยก / บัฟเฟอร์ปัจจุบันที่ฉันเปิดไฟล์หรือไม่?

2
มีวิธีการนามแฝง `: w'` to`: w` เพื่อหลีกเลี่ยงการสร้างไฟล์ชื่อ '?
เป็นครั้งคราว, พิ้งกี้ของฉันจะกินหญ้าที่สำคัญในขณะที่เอื้อมมือไปหยิบใส่ผลใน':w'<Enter> ฉันได้พยายาม: cabbrev w' :w cabbrev w\' :w cabbrev "w'" :w ไม่ทำงานเลย มีวิธีการนามแฝง:w'ไป:wหรือไม่? ฉันยังใช้ cmdwin ( :help cmdwin+ nnoremap : :<C-F>) แทนบรรทัดคำสั่งปกติดังนั้นคะแนนโบนัสถ้ามันใช้งานได้เช่นกัน

2
ฉันจะตรวจสอบการสะกดคำในแอตทริบิวต์ HTML ได้อย่างไร
คุณลักษณะการตรวจสอบการสะกดคำเป็นกลุ่มนั้นใช้งานได้ดีในกรณีส่วนใหญ่ - มันฉลาดพอที่จะแยกรหัสจากตัวอักษรและความคิดเห็นในภาษาส่วนใหญ่ อย่างไรก็ตามฉันมีปัญหากับการตรวจสอบการสะกด HTML: <div title="text with mistaek #1" data-text="text with mistaek #2">text with mistaek #3</div> ในตัวอย่างข้างต้นdivจะมีการเน้นเฉพาะความผิดพลาดภายใน(# 3) มันจะเป็นการดีถ้ามีการตรวจสอบคุณลักษณะที่เกี่ยวข้องทั้งหมด - อย่างน้อยtitleและdata-*ในอุดมคติ - รายการของคุณลักษณะที่กำหนดค่าได้ มันสามารถทำได้ผ่านการกำหนดค่าหรือ VimScript? ปลั๊กอินจะทำเช่นนั้น แต่ควรจะกำหนดค่าสำหรับHTMLไฟล์ที่เหมือนกัน ( เช่นไฟล์ ASP. NET MVC cshtml)

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