Vi & Vim

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

5
การนำทางหลายไฟล์
ถ้าผมเปิดเป็นกลุ่มที่มีหลายไฟล์ในบรรทัดคำสั่งเช่นvim debug.log*โหลดdebug.log, debug.log.1และdebug.log.2ผมสามารถนำทางระหว่างพวกเขากำหนดให้กับหลายหน้าต่าง ( :split/ :vsplit) หรือดังกล่าวหรือไม่ ทางลัดเดียวที่ฉันรู้จักสำหรับโหมดการทำงานนี้คือ:nซึ่งโหลดไฟล์ถัดไปในรายการ ฉันสามารถทำอะไรได้อีกในโหมดการทำงานหลายไฟล์นี้? (หรือหัวข้อความช่วยเหลือใดครอบคลุมเรื่องนั้น)

2
ฉันจะใช้การตรวจการสะกดของ Vim ด้วย 'คำพูดอัจฉริยะ' ได้อย่างไร
มีคำพูดตรง "ปกติ": '" และคุณมีมุมมอง "คำพูดอัจฉริยะ": '' " การตรวจสอบการสะกดคำของ Vim ใช้ได้กับเครื่องหมายคำพูด "ตรง" แต่ไม่ใช่เครื่องหมายคำพูดเทวดาดังนั้นนี่จึงถือว่าเป็น "ผิด": มัน ... Monty Python แม้ว่ามันจะไม่ใช่ ภาพหน้าจอในกรณีที่แบบอักษรของคุณไม่แสดงความแตกต่าง: ฉันจะแก้ไขสิ่งนี้ได้อย่างไร ฉันต้องการให้มันทำงานกับทั้งสองสายพันธุ์ (มันและมัน)

2
วิธีการดำเนินการคำสั่งในการเริ่มต้นเป็นกลุ่ม
ฉันเพิ่งติดตั้งปลั๊กอินสำหรับ python ซึ่งแสดงแผนผังวิธีการ ดังนั้นฉันต้องการเปิดแผนผังเมื่อเริ่มต้นจึงไม่จำเป็นต้องกดปุ่มทุกครั้งที่ฉันเปิด.pyไฟล์ แต่ฉันต้องการคำสั่งนี้จะถูกดำเนินการสำหรับ.pyไฟล์เท่านั้น นี่คือลักษณะชิ้น vimrc ของฉัน: nmap <F8> :TagbarToggle<CR> มีวิธีดำเนินการคำสั่งนี้เมื่อเริ่มต้นสำหรับ.pyไฟล์เท่านั้นหรือไม่

2
“ ปลั๊กอินชนิดไฟล์บน” ทำอะไรได้จริง?
ฉันเข้าใจว่ามันโหลดftplugin.vimไฟล์ แต่มันทำอะไรได้จริง? มีการตั้งค่าตัวเลือก (ขึ้นอยู่กับประเภทของไฟล์) หรือไม่? ถ้าฉันจะรวมบรรทัดนี้ในตอนเริ่มต้นของวิดีโอเพลงของฉัน filetype plugin indent on แล้วฉันจะตั้งค่าตัวเลือกบางอย่างหลังจากบรรทัดนี้ (เช่น autoindent, smartindent, ฯลฯ ) มันจะยุ่งกับพวกเขาเหรอ? ฉันจะรู้ได้อย่างไรว่าตัวเลือกใดได้รับผลกระทบจากปลั๊กอินประเภทไฟล์หรือไฟล์ที่เยื้อง
11 filetype 

4
วิธีการส่งออกผลลัพธ์ของคำสั่ง vim เพื่อเปลือก
สมมติว่าฉันอยู่ในเชลล์ ( bash) และต้องการดูผลลัพธ์ที่:scriptnamesจะให้ แต่ไม่ต้องการเริ่มเป็นกลุ่มหรือบางทีฉันต้องการที่จะสะท้อนให้เป็นไฟล์อื่น ฉันก็เลยลงมือทำ vim +scriptnames ซึ่งแสดงสคริปต์ทั้งหมดให้ฉัน แต่ฉันจะสะท้อนที่ stdout ของเชลล์ได้อย่างไร
11 bash 

1
ฉันจะใช้โหมดเสร็จสิ้นการแทรกในแมโครได้อย่างไร
ฉันพยายามกำหนดมาโครที่สร้างรายการคำสุ่ม - ไอชอย่างรวดเร็ว ฉันต้องการให้แมโครเปลี่ยนสิ่งนี้เป็นรายการที่ชอบ a b c d e เป็นนี้ arezzo bywords czars détente eyrie สิ่งที่ฉันมี: วางเคอร์เซอร์บนจดหมาย a เริ่มบันทึกมาโคร qq a เข้าสู่โหมดแทรก <C-x><C-k> - perform dictionary completion on the character before cursor - in this case the lettera` <C-p>arezzoเลือกรายการสุดท้ายในรายการเสร็จสิ้นที่ปรากฏขึ้นในระบบของฉันคำของมัน (NB ฉันได้longestรวมอยู่ในของฉัน'completeopt'การตั้งค่าที่จำเป็นสำหรับ<C-p>การทำงานในลักษณะนี้ในระหว่างการดำเนิน: 'set completeopt=longest,menuone,preview') <C-y> ยอมรับความสำเร็จ ^[^[ ออกจากโหมดแทรก j ย้ายลงไปที่บรรทัดถัดไปพร้อมที่จะทำการดำเนินการเดียวกันในบรรทัดถัดไป q …

1
ชื่อไฟล์ที่เป็นกลุ่ม / เสร็จสิ้นเส้นทาง
ฉันรู้ว่าฉันสามารถกรอกชื่อไฟล์ / พา ธ จากไดเรกทอรีปัจจุบันโดยใช้ ctrl + x, ctrl + f ( compl-filename) ใช้งานได้ดีเมื่อรวมกับ set autochdir ซึ่งการเปลี่ยนแปลงจะอัปเดตไดเรกทอรีปัจจุบันไปยังไดเรกทอรีของบัฟเฟอร์ที่ใช้งานอยู่ อย่างไรก็ตามฉันเริ่มใช้airblade/vim-rooterเพื่อทำให้ไดเรกทอรีปัจจุบันเป็นโฟลเดอร์ "โครงการ" ตอนนี้การเติมชื่อไฟล์ให้สมบูรณ์จะเริ่มต้นจากโฟลเดอร์โครงการเสมอ คำถาม: มีวิธีทำให้ชื่อไฟล์สมบูรณ์หรือไม่ใช้ไดเรกทอรีของบัฟเฟอร์ที่ใช้งานอยู่แทนที่จะเป็นไดเรกทอรีปัจจุบันหรือไม่? หรือวิธีแก้ปัญหาอื่น ๆ ยังถูกถามใน stackoverflow

3
วิธีการเลือกเปลี่ยนสตริงไฮไลต์
ด้วยการค้นหาฉันได้เน้นสตริงที่ฉันต้องการเปลี่ยน ตอนนี้ฉันต้องการแทนที่เฉพาะข้อความที่เน้นสี ฉันใช้nเพื่อไปยังอินสแตนซ์ถัดไปของสตริงการค้นหา ฉันคิดว่าฉันสามารถทำอะไรบางอย่างเช่นciwแต่เปลี่ยนคำทั้งหมดไม่ใช่แค่ข้อความที่เน้นสี ฉันคุ้นเคย:%s/old/new/gแต่ไม่ต้องการเปลี่ยนอินสแตนซ์ทั้งหมด แต่ฉันต้องการเลื่อนเคอร์เซอร์ไปที่แต่ละอินสแตนซ์แล้วตัดสินใจว่าจะเปลี่ยนหรือไม่
11 search  replace 

3
ปัญหาต่อไปนี้ลิงก์ของ doc ของ vim (: help) บนเทอร์มินัล
ฉันมีปัญหาในการอ่านเอกสารของกลุ่มในเทอร์มินัลเพราะฉันไม่สามารถติดตามลิงก์ที่ได้รับ ฉันพูด: ข้ามไปที่หัวเรื่อง: วางเคอร์เซอร์บนแท็ก (เช่น | บาร์ |) แล้วกด CTRL-] ปัญหาคือฉันใช้แป้นพิมพ์ภาษาสเปนซึ่งมีเครื่องหมาย "+" และ "]" อยู่บนปุ่มเดียวกันดังนั้นเมื่อฉันกด CTRL-] ฉันจะซูม ฉันสามารถแมป CTRL-] กับแป้นอื่นใดก็ได้หรือมีตัวเลือกอื่นได้หรือไม่?

1
วิธีการกำหนดหมายเลขรายการอัตโนมัติเป็นกลุ่ม?
สิ่งอื่น ๆ สัญญาอย่างเป็นทางการต้องมีรายการหมายเลข 1. Some text 2. More text 2.1. Sub-section text เป็นต้น กุญแจสำคัญคือการกำจัดหมายเลขใหม่ด้วยตนเองเมื่อแทรกหรือลบรายการ เป็นไปได้ด้วยvimหรือไม่ ความสอดคล้องของการกำหนดหมายเลขรายการเป็นเรื่องยากมากที่จะติดตามด้วยตนเอง หนึ่งในเป้าหมายที่เกี่ยวข้องกับสิ่งนี้คือการมีการควบคุมการแก้ไขที่เหมาะสมซึ่งเป็นไปได้โดยรูปแบบการจัดเก็บข้อมูลที่ไม่ยุ่งเหยิงเช่นข้อความที่ชัดเจน

3
วิธีการ grep ในเอาต์พุตคำสั่ง ex
หนึ่งค้นหารูปแบบในเอาต์พุตคำสั่ง ex ได้อย่างไร ตัวอย่างเช่นวิธีค้นหารูปแบบชื่อไฟล์ในผลลัพธ์ของ:scriptnamesคำสั่ง ในความช่วยเหลือสำหรับทุกรสชาติgrepและvimgrepมีเพียง{file}เป็นสถานที่ที่จะทำการค้นหา
11 vimscript 

3
ฉันจะย้อนกลับสตริงด้วยสคริปต์เป็นกลุ่มได้อย่างไร
ฉันพยายามที่จะย้อนกลับสตริงเพื่อที่จะกลายเป็น'abc defg hij' 'jih gfed cba'ทางออกที่ฉันมาด้วยคือ join(reverse(split(l:text, '.\zs')), '') มีวิธีแก้ปัญหาที่สง่างามกว่านี้หรือฉันควรยึดติดกับสิ่งที่ฉันคิด

6
การลบเป็นกลุ่มและวางโดยไม่มีบรรทัดใหม่
หลายครั้งในกลุ่มฉันต้องการลบบรรทัดทั้งหมดดังนั้นฉันจึงใช้ dd อย่างไรก็ตามฉันต้องวางบรรทัดนั้นลงในตำแหน่งอื่นภายในบรรทัด แต่สิ่งนี้จะแทรกบรรทัดใหม่ก่อนที่จะวางจึงทำให้ยากสำหรับฉันที่จะได้รับผลลัพธ์ที่ต้องการ ตัวอย่างเช่น, while( pasteInHere ) { cin >> n; // Delete this line completely with dd } เมื่อฉันทำกับรหัสข้างต้นฉันได้รับ: while( pasteInHere ) cin >> n; // Delete this line completely with dd { } ซึ่งอยู่ไกลจากผลลัพธ์ที่ฉันต้องการ ... ฉันจะระงับพฤติกรรมการขึ้นบรรทัดใหม่นี้ได้อย่างไรหรือใช้วิธีอื่นที่มีประสิทธิภาพมากขึ้นได้อย่างไร ฉันไม่คิดว่า d $ จะดีเพราะฉันไม่เพียง แต่ต้องไปที่จุดเริ่มต้นของบรรทัด แต่ถ้าฉันต้องการลบบรรทัดว่างด้วยฉันต้องลบมันในทะเบียนอื่นฉันรู้สึกว่าควรจะมีวิธีที่ง่ายกว่า! ขอบคุณ

6
วิธีลบบรรทัดด้านบน / ล่างเคอร์เซอร์ แต่ไม่ใช่บรรทัดปัจจุบัน
มีคำสั่งสำหรับการลบบรรทัด (หรือ n บรรทัด) เหนือบรรทัดปัจจุบันหรือไม่? ดังกล่าวข้างต้น = ปัจจุบันไม่รวม คือมีทางเลือกอื่นdkที่จะไม่ลบบรรทัดปัจจุบันหรือไม่ คล้ายกับวิธีo/ Oและp/ Pทำงาน แต่มีการลบ ขณะนี้ฉันกำลังทำอยู่kddซึ่งย้ายเคอร์เซอร์หนึ่งบรรทัดขึ้นและลบออก ฉันสามารถทำได้nnoremap <Leader>d kddและnnoremap <Leader>D jdd-แต่มีทางเลือกที่ไม่ย้ายเคอร์เซอร์ดูเหมือนว่าเป็นตัวเลือกที่ดีกว่า มีแบบนี้เหรอ?

3
อย่าเพิ่มบรรทัดใหม่ที่ท้ายไฟล์
Vim จะเพิ่มบรรทัดใหม่ที่ส่วนท้ายของไฟล์เมื่อทำการบันทึกและเป็นสาเหตุของข้อผิดพลาดในสคริปต์ PHP ของฉัน ฉันจะทำให้กลุ่มไม่เพิ่มบรรทัดใหม่นี้ในการบันทึกได้อย่างไร
11 save 

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