Vi & Vim

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

2
จะแทนที่ข้อความในบล็อกข้อความที่เลือกได้อย่างไร?
ไม่ใช่เรื่องง่ายที่จะหาชื่อที่ดีสำหรับปัญหาของฉัน ฉันรู้ที่จะแทรกหน้าบล็อกข้อความ: Ctrl- v เลือก ข้อความประเภทบรรทัดI ESC ตอนนี้ฉันต้องการจะทำเช่นนี้ แต่ยังรวมถึงการแทนที่ส่วนหนึ่งในการเลือกบล็อกของฉัน ขณะนี้ฉันกำลังดำเนินการสองอย่าง Ctrl- v เลือกบล็อก x กลับไปเริ่มต้น ตามด้วยลำดับที่ฉันพูดถึงข้างต้น มีวิธีรวมการดำเนินการทั้งสองนี้ด้วยการเลือก ( Ctrl- v) บล็อกเพียงครั้งเดียวหรือไม่ นี่คือตัวอย่างเล็ก ๆ : ฉันต้องการแปลงบล็อกต่อไปนี้ 1 text 2 text 3 text 4 text 5 text เข้าไป new text new text new text new text new text ทำ "การดำเนินการ" เพียงครั้งเดียว

4
วิธีการย้อนกลับทุก 4 บรรทัด?
ก่อนอื่นเลยนี่เป็นโพสต์แรกของฉันที่นี่ฉันอยากจะบอกว่าฉันได้พบว่า VIM เป็นเครื่องมือที่ยอดเยี่ยมและฟอรัมที่นี่จะเป็นประโยชน์อย่างมากในการค้นหาคำตอบของคำถาม ความช่วยเหลือที่ทรงคุณค่า ฉันยังใหม่กับ VIM ดังนั้นทุกสิ่งที่ฉันเรียนรู้มาจากที่นี่ คำถามของฉันคือฉันรู้วิธีย้อนกลับบรรทัดทั้งหมดในไฟล์ (: g / ^ / m0 ท่ามกลางวิธีอื่น ๆ ) แต่มีวิธีย้อนกลับทุก 4 บรรทัดในไฟล์ดังนั้น line1 line2 line3 line4 line5 line6 line7 line8 ... กลายเป็น line4 line3 line2 line1 line8 line7 line6 line5 ... คุณสามารถสมมติได้ว่าจะมีหลายบรรทัดใน 4 บรรทัดที่แน่นอนเสมอ
13 vimscript 


1
วิธีการใช้ตัวแปรในการแสดงออกของคำสั่ง 'ปกติ'?
เราจะใช้ตัวแปรอย่างไรเมื่อเรียกใช้บางสิ่งผ่านnormal!vimscript ตัวอย่าง: function! MyFunction(someArg) normal! (a:someArg)l endfunction สิ่งนี้ควรเลื่อนsomeArgขั้นตอนเคอร์เซอร์ไปทางขวา

4
เหตุผลสำหรับ \ r และ \ n หมายถึงสิ่งต่าง ๆ ในคำสั่ง s?
เราทุกคนรู้ว่าเมื่อค้นหา\nคือขึ้นบรรทัดใหม่และ\rเป็น carriage return ( ^M) แต่เมื่อแทนที่\rเป็นขึ้นบรรทัดใหม่ในขณะที่\nเป็นโมฆะ null ( ^@) ต้นกำเนิดของความไม่สมดุลนี้คืออะไร? ระบุว่าพฤติกรรมนี้เป็น ... แปลกประหลาดที่จะพูดน้อย (และค่อนข้างต่อต้านเมื่อคุณได้รับมันผิดครั้งแรก) ฉันคาดว่าจะมีเหตุผลทางประวัติศาสตร์ที่แปลกประหลาด (บังเอิญมีวิธี "แก้ไข" พฤติกรรมนี้และทำให้บางสิ่งบางอย่างง่ายขึ้นหรือไม่)

2
วิธีการแก้ไขข้อผิดพลาดทั่วไปของ linting โดยอัตโนมัติที่รายงานผ่าน syntastic
ฉันเริ่มใช้ปลั๊กอินsyntasticกับกลุ่มเพื่อรายงานข้อผิดพลาดผ้าสำลีในjavascriptรหัสของฉัน ฉันยังรวมeslintกับsyntasticและมันแสดงให้ฉันเห็นข้อผิดพลาดที่ดีคำเตือนในกรณีที่พวกเขามีอยู่ตามกฎที่เขียนไว้ในไฟล์. eslintrcของฉัน มีวิธีใดบ้างที่ฉันสามารถแก้ไขข้อผิดพลาดทั่วไปบางอย่างเช่นขาดเซมิโคลอนไม่มีที่ว่างและอื่น ๆ ด้วยการกดคีย์ แก้ไข: ฉันได้พบว่าeslintมีตัวเลือก --fix Automatically fix problems ซึ่งสามารถใช้สำหรับกรณีดังกล่าว ฉันต้องเรียกใช้คำสั่งนี้เพื่อให้ eslint แก้ไขปัญหาเหล่านั้น eslint --fix -c myconfig file.js ฉันต้องการทราบว่าสามารถรวมเข้ากับกลุ่มได้อย่างไร

3
วิธีที่มีประสิทธิภาพมากขึ้นในการใช้บัฟเฟอร์คืออะไร?
เมื่อเร็ว ๆ นี้ฉันได้ลดจำนวนปลั๊กอินที่ใช้อยู่อย่างมากดังนั้นฉันจึงค้นหาคำตอบโดยใช้ฟีเจอร์ Vim ในตัวเท่านั้น ฉันสังเกตเห็นข้อบกพร่องในเวิร์กโฟลว์ของฉันเมื่อฉันแก้ไขบัฟเฟอร์มากมาย: ฉันอยู่บนบัฟเฟอร์และฉันต้องการสลับไปยังอีกอันหนึ่งซึ่งฉันจำชื่อไม่ได้และไม่ใช่บัฟเฟอร์สำรอง . ดังนั้นการใช้งานจึง:b#เป็นไปไม่ได้และการใช้งานเสร็จสิ้นด้วยคำสั่ง:bจะไม่สะดวกเลย โดยให้ฉันทำสิ่งต่อไปนี้: ใช้งานครั้งแรก:buffersเพื่อรับรายการบัฟเฟอร์ที่เปิดอยู่ จำจำนวนบัฟเฟอร์ที่ฉันต้องการใช้ กดEnterเพื่อปิดรายการบัฟเฟอร์ ใช้:bXกับXจำนวนบัฟเฟอร์ที่จะใช้ เวิร์กโฟลว์นี้ดูเหมือนจะหนักสำหรับฉันดังนั้นฉันจึงเพิ่มบรรทัดต่อไปนี้ใน .vimrc: " Improve the navigation in the buffers nnoremap <Leader><S-b> :B<CR> command! B call Buffers() function! Buffers() execute "buffers" let buffer=input("Enter a buffer:") execute "b" . buffer endfunction สิ่งนี้ให้ฉันคำสั่ง:B(และการแมป) ซึ่งเรียกฟังก์ชั่น:buffersรออินพุตและในที่สุดก็เรียก:bตามด้วยอินพุต มันใช้งานได้ดี แต่ฉันประหลาดใจที่ฉันต้องพัฒนาฟังก์ชั่นดังกล่าว: โดยปกติ Vim จะมีเวิร์กโฟลว์เริ่มต้นที่มีประสิทธิภาพพอสมควรดังนั้นฉันจึงสงสัยว่าถ้ามีวิธีที่ดีกว่าในการเปลี่ยนไปใช้บัฟเฟอร์ที่ฉันไม่รู้อะไรยกเว้น …
13 buffers 

2
ฉันจะเปิดบัฟเฟอร์ใหม่โดยไม่ต้องเปิดในการแยกได้อย่างไร
ฉันรู้ว่าฉันสามารถใช้:newเพื่อเปิดบัฟเฟอร์ใหม่ในหน้าต่างแยก (กำหนดโดยset splitbelowและset splitright) แต่ฉันจะเปิดบัฟเฟอร์ใหม่ที่ว่างเปล่าโดยไม่เปิดแยกได้อย่างไร
13 buffers  split 

3
จะลดตัวอักษรตัวที่สองของคำโดยอัตโนมัติได้อย่างไร
เมื่อฉันต้องพิมพ์ข้อความจำนวนมากฉันมักจะกดนิ้วของฉันshiftเมื่อฉันเขียนตัวอักษรตัวแรกของประโยคที่มักจะให้: [...]end of sentence. NEw sentence[...] ที่นี่EของNEwที่ควรจะเป็นกรณีที่ต่ำกว่า ฉันพยายามสร้างฟังก์ชั่นที่จะตรวจสอบว่าตัวอักษรตัวที่สองของคำแรกของประโยคที่ฉันพิมพ์เป็นตัวพิมพ์ใหญ่และตัวพิมพ์เล็กหรือไม่ ส่วนที่สำคัญคือการแก้ไขควรทำโดยอัตโนมัติในขณะที่ฉันพิมพ์ตอนท้ายของประโยค จนถึงตอนนี้ฉันได้ลองเล่นกับเหตุการณ์บันทึกอัตโนมัติInsertCharPreก่อนที่จะทราบว่าข้อความไม่สามารถแก้ไขได้โดยฟังก์ชันที่ทริกเกอร์โดยเหตุการณ์นี้ อะไรจะเป็นทางออกที่ดี? หมายเหตุจนถึงตอนนี้ฉันไม่จำเป็นต้องมุ่งเน้นไปที่ตัวกล่องขอบเช่นตัวย่อซึ่งควรเป็นตัวพิมพ์ใหญ่หรือของแบบนี้ แก้ไขฉันทำสิ่งนี้ซึ่งเป็นวิธีแก้ปัญหาที่ไม่สมบูรณ์: autocmd CursorMovedI * call RemoveUnwantedUpper() function! RemoveUnwantedUpper() " Get the current sentence " Based on http://stackoverflow.com/a/23315227/4194289 let l:save_clipboard = &clipboard set clipboard= " Avoid clobbering the selection and clipboard registers. let l:save_reg = getreg('"') let l:save_regmode = …

2
วิธีการคืนค่าตำแหน่งของเคอร์เซอร์หลังจากรันคำสั่งปกติ?
ฉันพยายามโค้ดฟังก์ชันที่แทนที่อักขระในคอลัมน์ที่หกของบรรทัดปัจจุบันของฉันด้วยสัญลักษณ์ดอลลาร์ ( $) แต่ฉันต้องการเคอร์เซอร์ของฉันอยู่ในตำแหน่งเดิมก่อนเรียกใช้ฟังก์ชัน ดังนั้นฉันจึงพยายามจัดเก็บคอลัมน์ปัจจุบันดำเนินการเปลี่ยนแปลงของฉันแล้วกลับมาพร้อมกับฟังก์ชั่นต่อไปนี้: function! DollarSplit() let col_number=col(".") "stores the current column number of the cursor normal! 6|r$ " replaces the 6th caracter in line with a $ execute col_number."|" endfunction ฉันอาจจะเข้าใจผิดเกี่ยวกับexecuteคำสั่ง ... หรือบางทีฉันควรสร้างสตริงที่มีคำสั่งที่ฉันต้องการจะดำเนินการ?

4
ฉันจะรับ gVim บน Windows ให้ทำงานบน Linux ได้อย่างไร
ฉันเป็นผู้ใช้งาน Vim editor บน Linux และตอนนี้ฉันต้องการใช้บน Windows ฉันดาวน์โหลด Vim สำหรับ Windows ซึ่งเป็น gVim ฟีเจอร์ต่าง ๆ ของ Vim ไม่ทำงานใน gVim 7.4 เช่น visual block rxคำสั่งและคีย์ผสมอื่น ๆ ฉันต้องการ Vim เดิมจาก Linux ที่จะใช้บน Windows รุ่นนั้นมีให้สำหรับ Windows ด้วยหรือไม่ หรือฉันสามารถใช้การตั้งค่าที่คล้ายกับรูปแบบ Unix ได้หรือไม่?

5
ค้นหาด่วน จำกัด เฉพาะฟังก์ชัน C ++
ฉันทำงานในโครงการ C ++ ที่ค่อนข้างใหญ่ ด้านที่น่าผิดหวังอีกอย่างหนึ่งขององค์กรก็คือฟังก์ชั่นที่มีขนาดใหญ่มาก ๆ อยู่ในไฟล์ขนาดใหญ่ที่น่าขัน ฉันมักจะต้องการค้นหาอินสแตนซ์ใด ๆ ของตัวแปรส่วนกลางหรือการเรียกฟังก์ชันที่ จำกัด เฉพาะฟังก์ชันปัจจุบัน มีสูตรที่เรียบง่ายพอสมควรในการทำสิ่งนี้ให้สำเร็จหรือไม่? (ฉันมี ctags ติดตั้งและใช้ Tagbar ... ซึ่งอาจเป็นประโยชน์สำหรับสิ่งนี้)

2
ตรวจจับเทอร์มินัล neovim จาก bash ใน bashrc
neovim ตั้งค่าตัวแปรสภาพแวดล้อมใด ๆ ที่จะให้ฉันตรวจจับจากการทุบตีว่าเทอร์มินัลเป็น neovim หรือไม่? ฉันต้องการเปลี่ยนพฤติกรรมของฉัน.bashrcถ้า neovim เป็นสถานี
13 terminal  neovim 

2
เป็นไปได้ไหมที่จะบอกว่าหน้าต่างอยู่ด้านล่างหรือด้านบนซ้ายหรือขวา?
ฉันไม่รู้ว่ามีฟังก์ชั่นบางอย่างเพื่อตรวจสอบตำแหน่งของหน้าต่างหรือไม่ฉันหมายความว่ามันกำลังนั่งอยู่ที่ด้านล่างหรือด้านบนซ้ายหรือขวาหรือไม่? __________________________ | | | | | | | left | right | | | | | | | |___________|____________| __________________________ | | | top | |________________________| | | | bottom | |_______________________ |

2
ฉันจะหยุดแมโครแบบเรียกซ้ำเมื่อสิ้นสุดบรรทัดได้อย่างไร
ฉันจะสร้างมาโครแบบเรียกซ้ำเพื่อให้ทำงานเฉพาะจนถึงจุดสิ้นสุดของบรรทัดได้อย่างไร หรือวิธีการเรียกใช้แมโครแบบเรียกซ้ำจนกระทั่งจบบรรทัดเท่านั้น
13 macro 

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