Vi & Vim

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

1
ฉันสามารถกำหนดการเข้ารหัสแบบกำหนดเองสำหรับกลุ่มได้หรือไม่
ฉันใช้Programming Puzzles และ Code-golfบ่อยครั้ง ผู้ใช้จำนวนมากที่นั่นได้เขียนภาษาที่กำหนดเองเพื่อการเล่นกอล์ฟอย่างแท้จริง ฉันยังทำงานด้วยตัวเองตอนนี้ ภาษาเหล่านี้จำนวนมากมีการเข้ารหัสที่กำหนดเองเพื่อให้พวกเขาสามารถบีบคำสั่งเพิ่มเติมเป็นไบต์เดียว ยกตัวอย่างเช่นอย่างจริงจัง , เจลลี่และ05AB1E ฉันสามารถกำหนดค่ากลุ่มเพื่อใช้การเข้ารหัสแบบกำหนดเองของฉันได้หรือไม่ ฉันต้องการกำหนดค่าการจับคู่ไบต์เป็นยูนิโค้ดโค้ด - พอยต์ ตัวอย่างเช่น: 0x01 == "¢" จากนั้นเมื่อฉันพิมพ์<C-v><C-a>ก็จะแสดงตัวอักษรและเมื่อฉันเขียนมันจะประหยัดไบต์¢0x01 เป็นไปได้จากระยะไกลหรือไม่ และจะใช้งานได้ดีกับคลิปบอร์ดของระบบหรือไม่ (เช่นฉันสามารถคัดลอกและวางจากเบราว์เซอร์ของฉันไปเป็นกลุ่มและในทางกลับกัน)
9 encoding 

2
แก้ไขไดเร็กทอรีภายในกลุ่ม
เป็นไปได้ไหมที่จะแก้ไขไดเรกทอรีภายใน Vim? (คำสั่งบางคำสั่งทำงานกับไดเรกทอรี) ฉันต้องการทราบว่าการดำเนินการชนิดใดที่สามารถทำได้ในไดเรกทอรีภายในกลุ่ม เป็นกลุ่มสามารถเปิดไดเรกทอรีสำหรับการแก้ไขผมเชื่อว่ามันจะมีคำสั่งให้ทำงานด้วย แต่คำสั่งปกติจะทำงานแตกต่างกันสำหรับไดเรกทอรี ยกตัวอย่างเช่นการกดIและพิมพ์ชื่อไฟล์และไดเรกทอรีประหยัด เมื่อฉันให้lsก็ควรแสดงไฟล์นั้น

1
เลือกผลการค้นหาปัจจุบัน
ฉันได้hlsearchตั้งค่าไว้ แต่บางครั้งมันก็ทำให้ฉันนึกถึงว่าฉันได้เลือกข้อความค้นหาไว้แล้วและสามารถกดcเพื่อเปลี่ยนได้ คำที่ค้นหาอาจไม่ใช่ตัวอักษรจำนวนคำแม้แต่บรรทัดอย่างง่าย ๆ และอย่างไรก็ตามฉันไม่ต้องการนับ มีวิธีการvh(หรือch) พูดที่hทำงานจนกว่าการไฮไลต์ปัจจุบันหยุด?

2
บรรทัดที่ซ้ำกันที่ขึ้นต้นด้วย“ x” แทนที่“ x” ในบรรทัดที่ซ้ำกันด้วย“ y” หรือไม่
ฉันมีไฟล์ที่มีรูปแบบต่อไปนี้: foo 111 baz foo 222 baz foo 333 baz ซึ่งต้องเปลี่ยนเป็น foo 111 bar 111 baz foo 222 bar 222 baz foo 333 bar 333 baz ดังนั้นทำซ้ำทุกบรรทัดที่ขึ้นต้นด้วยfooและเปลี่ยนแปลงเฉพาะfooในซ้ำ แต่ปล่อยให้ส่วนที่เหลือของบรรทัด (ซึ่งแตกต่างกันในแต่ละกรณี) เหมือนเดิม ทำอย่างไร

1
เปลี่ยนรูปร่างเคอร์เซอร์ในโหมดรอดำเนินการ
เคอร์เซอร์ของฉันใน Gvim: เคอร์เซอร์ของฉันใน Gvim หลังจากกดd: มีวิธีใดบ้างที่ฉันสามารถเปลี่ยนเคอร์เซอร์ใน terminal Vim เมื่ออยู่ในโหมดผู้ดำเนินการที่ค้างอยู่? มันไม่จำเป็นต้องดูเหมือนภาพหน้าจอเลย สิ่งนี้ทำได้โดยo:hor50-CursorในguicursorGvim มีเพียงสามตัวเลือกที่ฉันเห็นสำหรับ Vim คือ: t_SI start insert mode (bar cursor shape) *t_SI* *'t_SI'* t_SR start replace mode (underline cursor shape) *t_SR* *'t_SR'* t_EI end insert or replace mode (block cursor shape) *t_EI* *'t_EI'* |termcap-cursor-shape| แต่ไม่มีอะไรเกี่ยวกับโอเปอเรเตอร์โหมดที่รอดำเนินการ ...

1
Smart word เสร็จสิ้นเมื่ออยู่ตรงกลางคำ
พิจารณาไฟล์ที่มีสองบรรทัดต่อไปนี้: someLongFunction someFunction เมื่อฉันอยู่ในโหมดแทรกตรงกลางคำที่สอง some|Function และฉันกดCtrl-nฉันได้รับ someLongFunctionFunction มีวิธีการกำหนดค่า Vim เพื่อให้ฉันได้รับ "smart" ที่สมบูรณ์แทนหรือไม่ someLongFunction

1
การเข้ารหัสผิดขณะเรียกเชลล์
ฉันกำลังทดลองกับไดอะแกรม DOT และพยายามทำสิ่งต่อไปนี้: :! dot -Tpng -oFab.png % ฉันพบข้อผิดพลาดเนื่องจากชื่อไฟล์ของฉันมีอักขระพิเศษ (" ó" ใน "Fabricación"): C:\windows\system32\cmd.exe /c ( dot -Tpng -oFab.png Fabricaci├│n.gv) Error: dot: can't open Fabricaci├│n.gv shell returned 2 Hit any key to close this window... อย่างที่คุณเห็นตัวละครพิเศษกำลังถูกเปลี่ยนเป็น " ├│" นี้จะมีเป็นกลุ่มและ gVim 7.4 ภายใต้ Win7 และ NTFS ดังนั้นผมถือว่าชื่อไฟล์ที่อยู่ในUTF16 ฉันยังคิดว่าเมื่ออัญเชิญเปลือก / cmd ชื่อไฟล์จะถูกตีความว่าเป็นบางเข้ารหัสอื่น …

1
วิธีการแก้ไขบล็อกที่เลือกด้วยคำสั่งภายนอก?
ฉันมีไฟล์ที่ประกอบด้วยสองส่วนแนวตั้ง ด้านซ้ายมีการจัดรูปแบบข้อมูลแล้วและฉันไม่ต้องการเปลี่ยนแปลง ฉันต้องการจัดรูปแบบข้อมูลทางด้านขวาเท่านั้น บอกว่าฉันมีไฟล์ที่มีเส้นเหมือนกัน foo=bar baz # Neato Junk quux=xyzzy # Bilbo Baggins Ring มีอีกหลายบรรทัดเช่นนั้น ฉันต้องการแก้ไขข้อความทางด้านขวาของอักขระ '#' เท่านั้น ฉันเลือกข้อความที่ฉันต้องการด้วยนิพจน์ต่อไปนี้: gg /# ctrl-v G $ แต่ถ้าฉันลองปรับเปลี่ยน (พูดด้วย:'<,'>!column -t) จริง ๆ แล้วมันจะปรับเปลี่ยนทั้งหมดของทุกบรรทัด นิพจน์ที่ถูกต้องที่ใช้เพื่อแก้ไขเฉพาะส่วนที่มองเห็นคืออะไร

1
ทำไมการแมป <Esc> ใหม่ทำให้เคอร์เซอร์กระโดด
ใน.vimrc: inoremap ii &lt;esc&gt; " ii to go back into command mode ปัญหาคือiiเคอร์เซอร์กระโดดไปทางขวา 35 คอลัมน์ บรรทัดอื่น ๆ ที่มีผลต่อEsc: nnoremap &lt;esc&gt;&lt;esc&gt; :noh&lt;return&gt;&lt;esc&gt; ฉันได้ลองแสดงความคิดเห็นมันไม่ได้ช่วย เต็ม.vimrc : set nocompatible filetype off " Vundle --------------------------------------------------------------------- set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plugin 'gmarik/Vundle.vim' Plugin 'bling/vim-airline' Plugin 'vim-airline/vim-airline-themes' Plugin 'scrooloose/nerdtree' Plugin 'scrooloose/nerdcommenter' Plugin 'scrooloose/syntastic' Plugin 'freitass/todo.txt-vim' Plugin …

1
การเน้นไวยากรณ์เป็นกลุ่มของตัวอักษรตัวเลขที่มีตัวคั่นหลักเดียวที่มีเครื่องหมายคำพูด
C ++ 14 ทำให้เรามีตัวเลือกในการใช้เครื่องหมายคำพูดเดี่ยวเพื่อแยกตัวเลขของตัวอักษรตัวเลขขนาดใหญ่ สิ่งนี้จะหยุดยั้งการเน้นไวยากรณ์ของ Vim ตัวอย่างเช่นพิจารณาโปรแกรม C ++ 14 ต่อไปนี้: #include &lt;stdlib.h&gt; int main(int argc, char** argv) { // small numbers are fine int normal_number = 5; // large numbers have the correct highlighting but they're hard to visually parse int huge_number = 1000000000; // apostrophes help with visual …

2
การแทนที่การแสดงออกปกติกรณีผสมในกลุ่ม
ฉันมักจะเจอสถานการณ์ที่ฉันมีไฟล์ที่มีตัวพิมพ์จำนวนมาก ตัวอย่างเช่น, CamelCase and camelCase ฉันกำลังมองหาตัวแทนนิพจน์ปกติที่จะผลิต AnotherCase and anotherCase ตอนนี้ฉันทำได้สองขั้นตอนหลังจากเลือกเส้นสายตา :s/CamelCase/AnotherCase/g :s/camelCase/anotherCase/g เป็นไปได้ในการเปลี่ยนขั้นตอนเดียวหรือฉันควรดูตัวเลือกอื่น ๆ เช่นฟังก์ชั่น.vimrcหรือไม่

2
ทำความเข้าใจกับ“ [[”,“]]”,“ []”,“] [”
ฉันพบว่ามันยากที่จะเข้าใจการเคลื่อนไหวของวัตถุข้อความเหล่านี้: *]]* ]] [count] sections forward or to the next '{' in the first column. When used after an operator, then also stops below a '}' in the first column. |exclusive| Note that |exclusive-linewise| often applies. *][* ][ [count] sections forward or to the next '}' in the first column. …

5
วิธีคัดลอกแต่ละบรรทัด 11 ครั้งโดยเพิ่ม“ 1” ครั้งสุดท้ายในแต่ละบรรทัดตั้งแต่ 2-12
ฉันมีจำนวนบรรทัดในไฟล์และฉันต้องการคัดลอกแต่ละบรรทัด 11 ครั้ง (เปลี่ยนแต่ละบรรทัดเป็น 12 บรรทัด) และเพิ่ม "1" สุดท้ายในแต่ละบรรทัดเพื่อให้ 12 บรรทัดมี "1" ถึง " 12 "โดยที่" 1 "เริ่มแรกคือ อาจมีเหตุการณ์อื่นเกิดขึ้นเป็น "1" ในแต่ละบรรทัด แต่ "1" ที่ฉันต้องการเพิ่มจะเป็นเหตุการณ์สุดท้ายในแต่ละบรรทัดเสมอ อีกวิธีในการดูคือ "1" สุดท้ายจะอยู่หลัง "/ nt /" - เหมือนใน "/ nt / 1" (และจะเป็น "/ nt / 1" เท่านั้นในแต่ละบรรทัด) . ตัวอย่างเช่นถ้าฉันมี: 1stlineblahblahblah/nt/1blah 2ndlineblahblahblah/nt/1blah 3rdlineblahblahblah/nt/1blah ฉันต้องการเปลี่ยนเป็น: 1stlineblahblahblah/nt/1blah 1stlineblahblahblah/nt/2blah …

3
ฉันจะเพิ่มข้อความ Skeleton ลงในไฟล์ vim ใหม่ได้อย่างไร
ฉันใช้ Vim สำหรับการเขียน C ++ และฉันมี#include&lt;&gt;คำสั่งความเห็นและอื่น ๆ ที่ฉันต้องรวมไว้ในไฟล์ใหม่แต่ละไฟล์ที่ฉันสร้างขึ้น ฉันได้เพิ่ม autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file) ถึง vimrc ของฉันเพราะฉันได้ยินว่าสิ่งนี้สร้างบัฟเฟอร์ด้วยข้อความที่ฉันต้องการ ฉันจะเพิ่มข้อความนี้ไปยังไฟล์ใหม่ได้อย่างไร มีวิธีง่าย ๆ ในการทำเช่นนี้จากบัฟเฟอร์หรือมีวิธีอื่นที่ง่ายในการทำสิ่งนี้ ฉันเคยได้ยินเกี่ยวกับปลั๊กอินเทมเพลตมาบ้างแล้ว มีแบบง่าย ๆ ที่สามารถทำได้สำหรับฉัน

5
จะแทนที่เนื้อหาระหว่างสองรูปแบบจากไฟล์ได้อย่างไร
ฉันเป็นรูปแบบของไฟล์ต่อไปนี้: &lt;common&gt; fitnes=0 genetic=1 method=0 &lt;/common&gt; &lt;inputs&gt; foo=bar bar=foo &lt;/inputs&gt; &lt;limits&gt; balance=200.00 &lt;/limits&gt; และฉันต้องการที่จะลบทุกสิ่งที่อยู่ระหว่าง&lt;inputs&gt;และ&lt;/inputs&gt;(ยกเว้นรูปแบบด้วยตนเอง) และแทนที่ด้วยเนื้อหาจากไฟล์อื่น (เช่นfoo.txt) กล่าวอีกนัยหนึ่งด้วยfoo=barและbar=fooจะถูกแทนที่ด้วยเนื้อหาอื่น อาจเป็นไปได้ว่าคล้ายกับวิธีที่คุณลบการแข่งขันหลายบรรทัดเช่น: :g/&lt;inputs/,/inputs&gt;/d แต่ฉันไม่แน่ใจในสิ่งที่ฉันควรแทนที่dเพื่อแทรกเนื้อหาของไฟล์อื่น แต่ฉันต้องการเก็บรูปแบบการจับคู่ไว้ วิธีที่คล้ายกันคือการลบเนื้อหาภายในของแท็ก htmlเช่น :/&lt;inputs&gt;/norm vitd แต่ฉันไม่รู้ว่าคุณจะเพิ่มเนื้อหาลงในไฟล์ได้อย่างไร เป็นการดีที่ฉันพยายามที่จะหาหนึ่งซับเพราะมันจะเป็นส่วนหนึ่งของสคริปต์อื่น ฉันจะบรรลุสิ่งนั้นได้อย่างไร

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