มุมมืดของแม่ของคุณที่ไม่เคยบอกคุณคืออะไร? [ปิด]


799

มีคำถามมากมายที่ผู้คนพูดถึงกลอุบายทั่วไปโดยเฉพาะอย่างยิ่ง " Vim + ctags tips and tricks "

อย่างไรก็ตามฉันไม่ได้อ้างถึงทางลัดที่ใช้กันทั่วไปซึ่งคนใหม่ ๆ ในกลุ่ม Vim จะดูเท่ห์ ฉันกำลังพูดถึงผู้ใช้ Unix ที่มีประสบการณ์ (ไม่ว่าจะเป็นผู้พัฒนาผู้ดูแลระบบทั้งสองและอื่น ๆ ) ที่คิดว่าพวกเขารู้อะไรบางอย่างที่ 99% ของพวกเราไม่เคยได้ยินหรือฝันถึง สิ่งที่ไม่เพียงทำให้การทำงานง่ายขึ้น แต่ยังมีความเป็น COOL และแฮ็ค หลังจากที่ทุกคนเป็นกลุ่มที่อยู่ในระบบปฏิบัติการส่วนใหญ่เข้มมุมที่อุดมไปด้วยในโลกดังนั้นจึงควรมีความซับซ้อนว่ามีเพียงความรู้ที่มีสิทธิพิเศษบางอย่างเกี่ยวกับและต้องการที่จะร่วมกับเรา


10
: หน้าต่าง Sex Split และ explorer ไฟล์รวม (แยกตามแนวนอน)
user3218088

2
คำถามนี้ดูเหมือนจะค่อนข้างสร้างสรรค์ - โดยดูจากจำนวน upvotes ... โหวตให้เปิดใหม่ - บางทีคำตอบที่ยอดเยี่ยมกว่าก็มาถึง - ซึ่งสามารถยกระดับหากมีประโยชน์ - จึงให้คุณค่ากับ SOF มากกว่า ฉันได้เรียนรู้สิ่งดีๆมากมายในเวลาเพียง 5 นาที ... สิ่งที่มีค่าจริงๆที่นี่ทำไมปิดบางสิ่งที่มีค่านี้ สิ่งนี้ไม่สร้างสรรค์
jhegedus

7
ไร้สาระที่คำถามนี้ถูกปิด พูดคุยเกี่ยวกับการยึดถือกฎ
Lepidopterist

2
ฉันคิดว่าคำถามนี้สร้างสรรค์มาก แต่เหมาะสมกว่าที่ Quora
Diogo Melo

2
ทำไมจึงมีการโหวต 2 (ณ ตอนนี้) เพื่อลบคำถามนี้ มันจะทำยังไงดี?
Akavall

คำตอบ:


782

อาจไม่ใช่สิ่งที่ 99% ของผู้ใช้ Vim ไม่รู้ แต่เป็นสิ่งที่ฉันใช้ทุกวันและผู้ใช้ power + Linux + Vim ต้องรู้

คำสั่งพื้นฐาน แต่มีประโยชน์อย่างยิ่ง

:w !sudo tee %

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

เห็นได้ชัดว่าคุณต้องอยู่ในระบบที่ติดตั้ง sudo และมีสิทธิ์ sudo


116
เนื้อหานั้นดีกว่าการใช้เสียงเรียกเข้าแบบรูท! upvoted!
Arafangion

27
สำหรับ noob ทีออฟทำอะไรกันแน่? บางคนจะแยกวิเคราะห์คำสั่งนี้สำหรับฉัน
AndyL

41
cmap w !! w! sudo tee%
jm666

58
sudo vimคุณไม่ควรใช้ แต่คุณควรส่งออกเป็นกลุ่มและเรียกใช้EDITOR sudoedit
Gerardo Marset

8
@maximus: vim แทนที่% ด้วยชื่อของบัฟเฟอร์ / ไฟล์ปัจจุบัน
migu

617

บางสิ่งที่ฉันเพิ่งค้นพบเมื่อเร็ว ๆ นี้ว่าฉันคิดว่าเจ๋งมาก:

:earlier 15m

แปลงเอกสารกลับเป็นเหมือนเดิมเมื่อ 15 นาทีที่แล้ว สามารถรับข้อโต้แย้งต่าง ๆ ตามระยะเวลาที่คุณต้องการย้อนกลับและขึ้นอยู่กับการไม่ยกระดับ สามารถกลับรายการได้ด้วยคำสั่งตรงกันข้าม:later


6
@skinp: หากคุณเลิกทำแล้วทำการเปลี่ยนแปลงเพิ่มเติมจากสถานะเลิกทำคุณจะสูญเสียประวัติการทำซ้ำนั้น สิ่งนี้จะช่วยให้คุณกลับไปสู่สถานะที่ไม่อยู่ในการเลิกทำการเลิกทำอีกต่อไป
ephemient

39
ยังมีประโยชน์มากคือ g + และ g- เพื่อย้อนกลับและไปข้างหน้าในเวลา นี่เป็นวิธีที่มีประสิทธิภาพมากกว่าสแต็กการเลิกทำ / ทำซ้ำอีกมากมายเนื่องจากคุณไม่หลวมประวัติศาสตร์เมื่อคุณทำอะไรบางอย่างหลังจากการเลิกทำ
Etienne ปิแอร์

9
คุณจะไม่สูญเสียประวัติการทำซ้ำหากคุณทำการเปลี่ยนแปลงหลังจากเลิกทำ มันไม่สามารถเข้าถึงได้ง่าย มีปลั๊กอินเพื่อช่วยให้คุณเห็นภาพนี้เช่น Gundo.vim
Ehtesh Choudhury

559
ว้าวดังนั้นตอนนี้ฉันสามารถทำได้:later 8hและฉันทำเพื่อวันนี้ : P
Igor Popov

7
คำสั่งของคุณจะถือว่าคุณใช้เวลาอย่างน้อย 15 นาทีเป็นกลุ่ม !
e2-e4

411

:! [command] รันคำสั่งภายนอกในขณะที่คุณอยู่ในกลุ่ม

แต่เพิ่มจุดหลังเครื่องหมายจุดคู่ :.! [command]และมันจะถ่ายโอนข้อมูลของคำสั่งลงในหน้าต่างปัจจุบันของคุณ ที่: . !

ตัวอย่างเช่น:

:.! ls

ฉันใช้สิ่งนี้มากสำหรับสิ่งต่าง ๆ เช่นการเพิ่มวันที่ปัจจุบันลงในเอกสารที่ฉันพิมพ์:

:.! date

74
มันค่อนข้างคล้ายกับ: r! ข้อแตกต่างเดียวที่ฉันสามารถบอกได้ก็คือ: r! เปิดบรรทัดใหม่:.! เขียนทับบรรทัดปัจจุบัน
saffsd

6
อีกทางเลือกหนึ่ง:.!dateคือการเขียน "วันที่" บนบรรทัดแล้วเรียกใช้!$sh(หรือมีคำสั่งแล้วตามด้วยบรรทัดว่างและเรียกใช้!jsh) สิ่งนี้จะไพพ์บรรทัดไปยังเชลล์ "sh" และแทนที่ด้วยเอาต์พุตจากคำสั่ง
hlovdal

43
:.!จริง ๆ แล้วเป็นกรณีพิเศษ:{range}!ซึ่งกรองช่วงของบรรทัด (บรรทัดปัจจุบันเมื่อช่วงคือ.) ผ่านคำสั่งและแทนที่บรรทัดเหล่านั้นด้วยเอาต์พุต ฉันพบว่า:%!มีประโยชน์สำหรับการกรองบัฟเฟอร์ทั้งหมด
Nefrubyr

2
@sundar: เหตุใดจึงต้องผ่านบรรทัดsedเมื่อคุณสามารถใช้คำสั่งในตัวed/ exคำสั่งในตัวที่คล้ายกันได้ ลองใช้:.s/old/new/g;-)
jabirali

4
และโปรดทราบด้วยว่า '!' เหมือนกับ 'y', 'd', 'c' ฯลฯ เช่นคุณสามารถทำได้: !!, number !!,! motion (เช่น! Gshell_command <cr> แทนที่จากบรรทัดปัจจุบันไปยังจุดสิ้นสุดของไฟล์ ('G') ด้วย เอาต์พุตของ shell_command)
aqn

312

ไม่ชัดเจนอย่างแน่นอน แต่มีคำสั่ง "ลบใน" หลายคำสั่งซึ่งมีประโยชน์อย่างยิ่งเช่น ..

  • diw เพื่อลบคำปัจจุบัน
  • di( เพื่อลบภายใน parens ปัจจุบัน
  • di" เพื่อลบข้อความระหว่างเครื่องหมายคำพูด

คนอื่นสามารถพบได้บน :help text-objects


8
ตบเบา ๆ "วงเล็บ arounb ลบ" ตบเบา ๆ สำหรับวงเล็บรอบหยิก, เสื้อสำหรับแท็กประเภท XML, รวมกันที่มีคำสั่งปกติตามที่คาดไว้ CIB / Yab / ดิส / ถัง ฯลฯ
SJH

15
@Masi: ยี่ (VA (P ลบเพียงวงเล็บ
ดอนรีบา

42
นี่อาจเป็นเหตุผลที่ดีที่สุดสำหรับฉันที่อยู่กับ Vim คำสั่งนั้นและคำสั่ง "เปลี่ยน" ที่เทียบเท่า: ciw, ci (, ci ", เช่นเดียวกับ dt <space> และ ct <space>
thomasrutter

4
@thomasrutter: ทำไมไม่ dW / cW แทนที่จะเป็น dt <space>

9
@Masi: ด้วยปลั๊กอินเสียงเซอร์ราวด์: ds (.

237

เดทุกอย่างลบจนถึงจุดสิ้นสุดของคำโดยการกด ตามใจปรารถนาของคุณ

ci (xyz [Esc] - นี่คือสิ่งแปลก ๆ ที่นี่ 'i' ไม่ได้หมายถึงโหมดแทรก แต่มันหมายถึงในวงเล็บดังนั้นลำดับนี้จะตัดข้อความภายในวงเล็บที่คุณยืนอยู่และแทนที่ด้วย "xyz" นอกจากนี้ยังทำงานในวงเล็บสี่เหลี่ยมและรูป - เพียงแค่ทำ ci [หรือ ci {ตามลําดับตามธรรมชาติคุณสามารถทำ di (ถ้าคุณเพียงแค่ต้องการลบข้อความทั้งหมดโดยไม่ต้องพิมพ์อะไรคุณสามารถทำได้aแทนiถ้าคุณ ต้องการลบวงเล็บเช่นกันและไม่เพียง แต่ใส่ข้อความไว้ข้างใน

ci " - ตัดข้อความในเครื่องหมายคำพูดปัจจุบัน

ciw - ตัดคำปัจจุบัน นี้ทำงานเช่นเดียวกับก่อนหน้านี้หนึ่งยกเว้นว่าจะถูกแทนที่ด้วย(w

C - ตัดส่วนที่เหลือของบรรทัดและเปลี่ยนเป็นโหมดแทรก

ZZ - บันทึกและปิดไฟล์ปัจจุบัน (WAY เร็วกว่า Ctrl-F4 เพื่อปิดแท็บปัจจุบัน!)

ddp - เลื่อนบรรทัดปัจจุบันลงหนึ่งแถว

xp - ย้ายตัวละครปัจจุบันหนึ่งตำแหน่งไปทางขวา

เป็นตัวพิมพ์ใหญ่ดังนั้นจึงviwUเพิ่มคำให้มากขึ้น

~ - เปลี่ยนกรณีดังนั้นviw~จะกลับปลอกทั้งคำ

Ctrl + u / Ctrl + dเลื่อนหน้าจอครึ่งหน้าจอขึ้นหรือลง สิ่งนี้ดูเหมือนว่าจะมีประโยชน์มากกว่าเพจจิ้งแบบเต็มหน้าจอตามปกติเนื่องจากทำให้ง่ายต่อการดูว่าหน้าจอทั้งสองเกี่ยวข้องกันอย่างไร สำหรับผู้ที่ยังต้องการเลื่อนหน้าจอทั้งหมดพร้อมกันมี Ctrl + f สำหรับส่งต่อและ Ctrl + b สำหรับย้อนหลัง Ctrl + Y และ Ctrl + E เลื่อนลงหรือเพิ่มทีละหนึ่งบรรทัด

คำสั่งที่บ้า แต่มีประโยชน์มากคือ zz - มันเลื่อนหน้าจอเพื่อทำให้บรรทัดนี้ปรากฏตรงกลาง นี่เป็นสิ่งที่ยอดเยี่ยมสำหรับการวางโค้ดที่คุณกำลังทำงานอยู่ในใจกลางของความสนใจของคุณ คำสั่งพี่น้อง - zt และ zb - ทำให้บรรทัดนี้เป็นบรรทัดบนสุดหรือล่างสุดบน sreen ซึ่งไม่ค่อยมีประโยชน์เท่าที่ควร

%ค้นหาและข้ามไปยังวงเล็บที่ตรงกัน

de - ลบจากเคอร์เซอร์ไปที่ท้ายคำ (คุณยังสามารถทำได้dEเพื่อลบจนกระทั่งเว้นวรรคถัดไป)

bde - ลบคำปัจจุบันจากซ้ายไปขวาตัวคั่น

df [space] - ลบจนถึงและรวมช่องว่างถัดไป

dt - ลบจนกว่าจะถึงจุดต่อไป

วัน - ลบทั้งบรรทัดนี้

ท่าน (หรือ yE) - ดึงข้อความจากที่นี่ไปจนจบคำ

ce - ตัดผ่านส่วนท้ายของคำ

ลาก่อน - คัดลอกคำปัจจุบัน (ทำให้ฉันสงสัยว่า "สวัสดี" ทำอะไร!)

yy - คัดลอกบรรทัดปัจจุบัน

cc - ตัดบรรทัดปัจจุบันคุณสามารถทำได้Sแทน นอกจากนี้ยังมีฝาปิดด้านล่างsซึ่งตัดอักขระปัจจุบันและสวิตช์เพื่อแทรกโหมด

viwy หรือ viwc งัดหรือเปลี่ยนคำปัจจุบัน กดปุ่มwหลายครั้งเพื่อเลือกคำต่อ ๆ ไปใช้bเพื่อเลื่อนไปข้างหลัง

vi { - เลือกข้อความทั้งหมดในวงเล็บรูป va - เลือกข้อความทั้งหมดรวมทั้ง {} s

vi (p - เน้นทุกสิ่งภายใน () s และแทนที่ด้วยข้อความที่วาง

ขและ e ย้ายเคอร์เซอร์คำโดยคำคล้าย ๆ กับวิธี Ctrl + ลูกศรทำตามปกติ คำจำกัดความของคำนั้นแตกต่างกันเล็กน้อยเนื่องจากผู้ส่งต่อเนื่องหลายรายถือว่าเป็นคำเดียว หากคุณเริ่มต้นที่ตรงกลางของคำการกด b จะนำคุณไปยังจุดเริ่มต้นของคำปัจจุบันเสมอและแต่ละ b ที่ต่อเนื่องกันจะข้ามไปที่จุดเริ่มต้นของคำถัดไป ในทำนองเดียวกันและง่ายต่อการจำeได้รับเคอร์เซอร์ไปที่จุดสิ้นสุดของปัจจุบันและแต่ละคำที่ตามมา

คล้ายกับb/ e, พิมพ์ใหญ่BและEเลื่อนเคอร์เซอร์ไปทีละคำโดยใช้ช่องว่างเท่านั้นเป็นตัวคั่น

capital D (หายใจลึก ๆ )ลบบรรทัดที่เหลือไปทางขวาของเคอร์เซอร์เช่นเดียวกับ Shift + End / Del ในเอดิเตอร์ปกติ (แจ้งให้ทราบ 2 keypresses - Shift + D - แทน 3)


15
ztค่อนข้างมีประโยชน์ถ้าคุณใช้ที่จุดเริ่มต้นของฟังก์ชั่นหรือคำจำกัดความของชั้นเรียน
Nick Lewis

9
vityและvitcสามารถลงไปyitและcitตามลำดับ
นาธาน Fellman

33
ทุกสิ่งที่คุณเรียกว่า "ตัด" คือ "เปลี่ยน" เช่น: C มีการเปลี่ยนแปลงจนกว่าจะสิ้นสุดของบรรทัด Vim ที่เทียบเท่ากับ "ตัด" คือ "ลบ", ทำด้วย d / D ข้อแตกต่างที่สำคัญระหว่างการเปลี่ยนแปลงและการลบคือการลบจะทำให้คุณอยู่ในโหมดปกติ แต่การเปลี่ยนแปลงจะทำให้คุณเข้าสู่โหมดแทรก (แม้ว่าคุณจะยังอยู่ในคำสั่งการเปลี่ยนแปลงซึ่งมีประโยชน์เพราะการเปลี่ยนแปลงทั้งหมดสามารถทำซ้ำได้.)
Laurence Gonsalves

11
ฉันคิดว่านี่เป็นรายการสิ่งที่หลายคนไม่รู้จัก yy เป็นเรื่องธรรมดามากฉันจะคิด
Almo

19
byeไม่ทำงานเมื่อคุณอยู่ในอักขระตัวแรกของคำ yiwทำเสมอ
Andrea Francia

204

หนึ่งที่ฉันไม่ค่อยพบในบทเรียน Vim ส่วนใหญ่ แต่ INCREDIBLY มีประโยชน์ (อย่างน้อยสำหรับฉัน) เป็น

g; and g,

เพื่อย้าย (ไปข้างหน้าถอยหลัง) ผ่านรายการการเปลี่ยนแปลง

ให้ฉันแสดงวิธีใช้ บางครั้งฉันต้องคัดลอกและวางชิ้นส่วนของรหัสหรือสตริงพูดรหัสสีฐานสิบหกในไฟล์ CSS ดังนั้นฉันค้นหาข้าม (ไม่สนใจว่าการจับคู่อยู่ตรงไหน) คัดลอกแล้วข้ามกลับ (g;) ฉันกำลังแก้ไขรหัสเพื่อวางในที่สุด ไม่จำเป็นต้องสร้างเครื่องหมาย ที่เรียบง่าย

แค่ 2 เซ็นต์ของฉัน


29
ในทำนองเดียวกัน'.จะไปที่บรรทัดที่แก้ไขล่าสุดและ`.จะไปที่ตำแหน่งที่แก้ไขล่าสุด
aehlke

8
Ctrl-O และ Ctrl-I (แท็บ) จะทำงานคล้ายกัน แต่ไม่เหมือนกัน พวกเขาย้ายไปข้างหลังและไปข้างหน้าใน "รายการข้าม" ซึ่งคุณสามารถดูได้โดยการทำ: กระโดดหรือ: ju สำหรับข้อมูลเพิ่มเติมทำ: ช่วยตัวตลก
Kimball Robinson

17
คุณสามารถแสดงรายการการเปลี่ยนแปลงโดยทำ: การเปลี่ยนแปลง
Kimball Robinson

แดงร้อนที่มีประโยชน์ ฉันใช้<C-o>/ <C-i>สำหรับตลอดเวลา - หรือทำเครื่องหมายสถานที่ของฉัน
Wayne Werner

187
:%!xxd

ทำให้เป็นกลุ่มในโปรแกรมแก้ไขฐานสิบหก

:%!xxd -r

เปลี่ยนกลับ

คำเตือน: หากคุณไม่ได้แก้ไขด้วยไบนารี่ (-b) คุณอาจทำให้ไฟล์เสียหาย - Josh Lee ในความคิดเห็น


9
และคุณจะเปลี่ยนกลับอย่างไร
Christian

40
:! xxd -r // หากต้องการย้อนกลับจาก HEX
Naga Kiran

21
ที่จริงผมคิดว่ามัน:%!xxd -rจะกลับมันกลับ
Andreas Grech

@JoshLee: ถ้าใครระวังไม่ให้ขึ้นบรรทัดใหม่มันปลอดภัยไหมที่จะไม่ใช้ตัวเลือก -b? ฉันถามเพราะบางครั้งฉันต้องการเปลี่ยน hex แต่ฉันไม่ต้องการปิดและเปิดไฟล์อีกครั้ง
dotancohen

4
@dancancenen: หากคุณไม่ต้องการปิด / เปิดไฟล์อีกครั้งคุณสามารถทำได้: set binary
Bambu


119

บางครั้งการตั้งค่าใน. vimrc ของคุณจะถูกแทนที่โดยปลั๊กอินหรือ autocommand ในการแก้ไขข้อบกพร่องนี้เป็นเคล็ดลับที่มีประโยชน์คือใช้คำสั่ง: verbose ร่วมกับ: set ตัวอย่างเช่นในการหาจุดที่ cindent ตั้งค่า / unset:

:verbose set cindent?

สิ่งนี้จะให้ผลลัพธ์เช่น:

cindent
    Last set from /usr/share/vim/vim71/indent/c.vim

สิ่งนี้ยังทำงานกับแผนที่และไฮไลต์ (ขอบคุณ joeytwiddle สำหรับการชี้เรื่องนี้) ตัวอย่างเช่น:

:verbose nmap U
n  U             <C-R>
        Last set from ~/.vimrc

:verbose highlight Normal
Normal         xxx guifg=#dddddd guibg=#111111 font=Inconsolata Medium 14
        Last set from ~/src/vim-holodark/colors/holodark.vim

8
เคล็ดลับที่ยอดเยี่ยม - สิ่งที่ฉันกำลังมองหาในวันนี้
Artem Russakovskii

สุดยอดเคล็ดลับ! คุณจะรู้จักสิ่งเหล่านี้ได้อย่างไร
Rafid

1
:verboseยังสามารถใช้ก่อนnmap lหรือhighlight Normalเพื่อค้นหาตำแหน่งที่lคีย์แมปหรือNormalไฮไลต์ถูกกำหนดล่าสุด มีประโยชน์มากสำหรับการแก้ไขข้อบกพร่อง!
joeytwiddle

@joeytwiddle ขอบคุณ! ฉันเพิ่มข้อมูลนั้นในคำตอบ
Laurence Gonsalves

เมื่อคุณเข้าสู่การสร้างการแมปที่กำหนดเองสิ่งนี้จะช่วยตูดของคุณหลายครั้งอาจเป็นหนึ่งในสิ่งที่มีประโยชน์ที่สุดที่นี่ (IMO)!
SidOfc


98

ไม่แน่ใจว่านี่จะนับว่ามืด - มุม - เลย แต่ฉันเพิ่งเรียนรู้ ...

:g/match/y A

จะดึง (คัดลอก) บรรทัดทั้งหมดที่มี "จับคู่" ลงใน"a/ @aลงทะเบียน (การใช้อักษรตัวพิมพ์ใหญ่ตามที่Aทำให้กลุ่มyankings ผนวกแทนการแทนที่เนื้อหาการลงทะเบียนก่อนหน้านี้) ฉันใช้มันบ่อยมากเมื่อสร้างสไตล์ของ Internet Explorer


นับนับเป็นฉันไม่ได้เห็นคนนี้ :)

ทำได้ดีนี่. ไม่เคยได้ยินเลย ... อาจเป็นประโยชน์: P
skinp

5
คุณสามารถใช้: g! เพื่อหาสายที่ไม่ตรงกับอดีตรูปแบบ: g / ชุด / วันปกติ (ลบทุกสายที่ไม่ได้มีการตั้งค่า)!
tsukimi

3
บางครั้งการทำในสิ่งที่สึกิมิพูดนั้นดีกว่าและแค่กรองบรรทัดที่ไม่ตรงกับรูปแบบของคุณ เวอร์ชันย่อของคำสั่งนั้น: :v/PATTERN/dคำอธิบาย: :vเป็นตัวย่อสำหรับ:g!และ:gคำสั่งจะใช้คำสั่ง ex ใด ๆ กับบรรทัด :y[ank]การทำงานและเพื่อไม่แต่ที่นี่สิ่งที่เป็นธรรมชาติมากที่สุดที่จะทำคือเพียงแค่:normal:d[elete]
pandubear

คุณสามารถทำได้:g/match/normal "Ayy- normalคำหลักให้คุณบอกให้เรียกใช้คำสั่งโหมดปกติ (ซึ่งคุณอาจคุ้นเคยมากกว่า)
Kimball Robinson

93

ต้องการดูประวัติคำสั่งของคุณหรือไม่

q:

จากนั้นเรียกดูแก้ไขและดำเนินการคำสั่งในที่สุด

เคยทำการเปลี่ยนแปลงที่คล้ายกันกับสองไฟล์และสลับไปมาระหว่างไฟล์เหล่านั้นหรือไม่ (พูดไฟล์ต้นฉบับและไฟล์ส่วนหัว?)

:set hidden
:map <TAB> :e#<CR>

จากนั้นแท็บไปมาระหว่างไฟล์เหล่านั้น


131
ผมตีq:โดยอุบัติเหตุตลอดเวลา ...
จอชลี

11
หรือจากตัวแก้ไขอดีต (:) คุณสามารถทำ CTRL-f เพื่อเปิดหน้าต่างประวัติคำสั่ง
35432 Jason Jason Down

6
@ jleedev ฉันด้วย ฉันเกือบจะเกลียดคำสั่งนี้เพียงเพราะฉันใช้มันมากเกินไปโดยไม่ตั้งใจ
bradlis7

9
q / และ q? สามารถใช้ทำสิ่งที่คล้ายกันสำหรับรูปแบบการค้นหาของคุณ
bpw1621

5
การกด <Cf> หลังจาก: หรือ / (หรือเมื่อใดก็ตามที่คุณอยู่ในโหมดคำสั่ง) จะทำให้เมนูประวัติเหมือนกัน ดังนั้นคุณสามารถทำการตั้งค่าใหม่ q: ถ้าคุณกดมันมากโดยไม่ตั้งใจและยังคงเข้าถึงโหมดที่ยอดเยี่ยมนี้
idbrii

82

เป็นกลุ่มจะเปิด URL ตัวอย่างเช่น

vim http://stackoverflow.com/

ดีเมื่อคุณต้องการดึงแหล่งที่มาของหน้าขึ้นเพื่อการอ้างอิง


2
สำหรับฉันมันไม่ได้เปิดแหล่งที่มา; แต่ดูเหมือนว่ามันจะใช้ elinks เพื่อดัมพ์เพจที่เรนเดอร์ลงในบัฟเฟอร์แล้วเปิดมันแทน
Ivan Vučica

มีข้อผิดพลาดเมื่อเรียกใช้คำสั่งนี้
Dzung Nguyen

5
ทำงานได้ดีขึ้นด้วยการเฉือนที่ส่วนท้าย เคล็ดลับเรียบร้อย!
โทมัส

@Vdt: มันจะมีประโยชน์ถ้าคุณโพสต์ข้อผิดพลาดของคุณ หากเป็นเช่นนี้: " ข้อผิดพลาด (netrw) ไม่ใช่ทั้งคำสั่ง wget และ fetch ที่มีอยู่" คุณจำเป็นต้องทำให้เครื่องมือเหล่านี้อย่างใดอย่างหนึ่งพร้อมใช้งานจากตัวแปรสภาพแวดล้อม PATH ของคุณ
Isaac Nequittepas

ฉันพบว่าสิ่งนี้มีประโยชน์อย่างยิ่งเมื่อผู้ใช้ส่งลิงก์ไปยังบริการวางและลืมเลือกการเน้นไวยากรณ์ฉันมักจะต้องเปิดลิงก์เป็นกลุ่มหลังจากเพิ่ม "& raw"
Dettorer

68

มาโครสามารถเรียกมาโครอื่น ๆ และสามารถเรียกตัวเองได้

เช่น:

qq0dwj@qq@q

... จะลบคำแรกจากทุกบรรทัดจนกว่าจะสิ้นสุดไฟล์

นี่เป็นตัวอย่างง่ายๆ แต่แสดงให้เห็นถึงคุณสมบัติที่มีประสิทธิภาพมากของกลุ่ม


2
ฉันไม่รู้ว่ามาโครสามารถทำซ้ำตัวเองได้ เย็น. หมายเหตุ: qx เริ่มบันทึกลงใน register x (เขาใช้ qq สำหรับ register q) 0 ย้ายไปที่จุดเริ่มต้นของบรรทัด dw ลบคำ j เลื่อนลงบรรทัด @q จะเรียกใช้แมโครอีกครั้ง (การกำหนดลูป) แต่คุณลืมที่จะจบการบันทึกด้วย "q" สุดท้ายจากนั้นเรียกใช้แมโครโดยพิมพ์ @q
Kimball Robinson

2
ฉันคิดว่ามันเป็นความตั้งใจโดยเป็นมาโครซ้อนกันและแบบเรียกซ้ำ
Yktula

7
qqqqqifuu<Esc>h@qq@q
Gerardo Marset

6
อีกวิธีหนึ่งในการทำสิ่งนี้ให้สำเร็จคือการบันทึกแมโครในการลงทะเบียน a ที่ทำการแปลงเป็นบรรทัดเดียวจากนั้น linewise จะเน้นกลุ่มบรรทัดด้วย V และพิมพ์:normal! @aเพื่อใช้แมโครของคุณกับทุกบรรทัดในการเลือกของคุณ
นาธานลอง

ฉันพบโพสต์นี้ googling แมโคร VIM แบบเรียกซ้ำ ฉันไม่สามารถหยุดแมโครอื่นได้นอกจากฆ่ากระบวนการ VIM
dotancohen

55

สมมติว่าคุณมีการสนับสนุน Perl และ / หรือ Ruby ที่คอมไพล์แล้ว:rubydoและ:perldoจะรัน Ruby หรือ Perl หนึ่งซับในทุกบรรทัดในช่วง (เริ่มต้นที่บัฟเฟอร์ทั้งหมด) โดย$_ผูกกับข้อความของบรรทัดปัจจุบัน (ลบขึ้นบรรทัดใหม่) จัดการ$_จะเปลี่ยนข้อความของบรรทัดนั้น

คุณสามารถใช้สิ่งนี้เพื่อทำบางสิ่งที่ทำได้ง่ายในภาษาสคริปต์ แต่ไม่ชัดเจนนักเมื่อใช้ Vim builtins ตัวอย่างเช่นการย้อนกลับลำดับของคำในบรรทัด:

:perldo $_ = join ' ', reverse split

หากต้องการแทรกสตริงแบบสุ่มจำนวน 8 อักขระ (AZ) ที่ท้ายทุกบรรทัด:

:rubydo $_ += ' ' + (1..8).collect{('A'..'Z').to_a[rand 26]}.join

คุณ จำกัด การแสดงครั้งละหนึ่งบรรทัดและคุณไม่สามารถเพิ่มบรรทัดใหม่ได้


ถ้าฉันต้องการให้ perldo รันบนบรรทัดที่ระบุเท่านั้น หรือไม่กี่บรรทัดที่เลือก?
Sujoy

5
คุณสามารถให้ช่วงเหมือนกับคำสั่งอื่น ๆ ตัวอย่างเช่น: 1,5perldo จะทำงานบนบรรทัดที่ 1-5 เท่านั้น
ไบรอันจับผิด

คุณสามารถทำ $ _ + = '\ nNEWLINE !!!' จะได้รับการขึ้นบรรทัดใหม่หลังจากที่ปัจจุบันหรือไม่
เกร็ก

น่าเศร้าที่มันแค่เพิ่มตัวควบคุมที่ขี้ขลาดลงไปที่ท้ายบรรทัด จากนั้นคุณสามารถใช้การค้นหา / แทนที่เป็นกลุ่มเพื่อเปลี่ยนอักขระควบคุมทั้งหมดเป็นบรรทัดใหม่ได้
Brian Carper

3
ในทำนองเดียวกันpydoและpy3doทำงานกับงูหลามถ้าคุณมีการสนับสนุนที่จำเป็นรวบรวมไว้
Derecho

54

^ O และ ^ I

ไปที่ตำแหน่งเก่า / ใหม่กว่า เมื่อคุณเคลื่อนย้ายไฟล์ (โดยการค้นหาคำสั่งการย้าย ฯลฯ ) เป็นกลุ่ม rember "jumps" เหล่านี้ดังนั้นคุณสามารถทำซ้ำ jumps เหล่านี้ย้อนหลัง (^ O - O สำหรับเก่า) และส่งต่อ (^ I - ถัดจากฉันบนคีย์บอร์ด ) ฉันคิดว่ามันมีประโยชน์มากเมื่อเขียนโค้ดและทำการค้นหาจำนวนมาก

กูเกิล

ไปที่ตำแหน่งที่แทรกโหมดหยุดล่าสุด ฉันพบว่าตัวเองมักจะแก้ไขแล้วค้นหาบางอย่าง หากต้องการกลับสู่การแก้ไขสถานที่กดปุ่ม gi

GF

วางเคอร์เซอร์ที่ชื่อไฟล์ (เช่นรวมไฟล์ส่วนหัว) กด gf และเปิดไฟล์

GF

คล้ายกับ gf แต่รู้จักรูปแบบ "[ชื่อไฟล์]: [หมายเลขบรรทัด]" กด gF จะเปิด [ชื่อไฟล์] และตั้งเคอร์เซอร์เป็น [หมายเลขบรรทัด]

^ P และ ^ N

ข้อความอัตโนมัติสมบูรณ์ขณะแก้ไข (^ P - การจับคู่ก่อนหน้าและ ^ N การจับคู่ต่อไป)

^ X ^ L

ในขณะที่การแก้ไขเสร็จสมบูรณ์ในบรรทัดเดียวกัน (มีประโยชน์สำหรับการเขียนโปรแกรม) คุณเขียนโค้ดแล้วจำได้ว่าคุณมีรหัสเดียวกันอยู่ที่ไหนสักแห่งในไฟล์ เพียงกด ^ X ^ L จากนั้นบรรทัดทั้งหมดจะเสร็จสมบูรณ์

^ ^ X F

กรอกชื่อไฟล์ คุณเขียน "/ etc / pass" อืม คุณลืมชื่อไฟล์ เพียงกด ^ X ^ F และชื่อไฟล์จะเสร็จสมบูรณ์

^ Z หรือ: sh

ย้ายไปที่เปลือกชั่วคราว หากคุณต้องการทุบตีอย่างรวดเร็ว:

  • กด ^ Z (เพื่อวาง vi ในพื้นหลัง) เพื่อกลับไปที่เปลือกเดิมและกด fg เพื่อกลับไปเป็นกลุ่ม
  • กด: sh เพื่อไปยังเชลล์ย่อยและกด ^ D / exit เพื่อกลับไปที่ vi back

ด้วยความ^X^Fโกรธของสัตว์เลี้ยงของฉันก็คือชื่อไฟล์รวมถึง=สัญญาณทำให้มันทำให้สิ่งเลวร้ายในหลาย ๆ ครั้ง (ไฟล์ ini, makefiles ฯลฯ ) ฉันใช้se isfname-==เพื่อยุติความรำคาญ
sehe

3
+1 การเติมข้อความอัตโนมัติในตัวกำลังนั่งอยู่ที่นั่นเพื่อรอการค้นพบ
joeytwiddle

48
" insert range ip's
"
"          ( O O )
" =======oOO=(_)==OOo======

:for i in range(1,255) | .put='10.0.0.'.i | endfor

2
ฉันไม่เห็นสิ่งนี้เป็นสิ่งที่ดีสำหรับ (นอกเหนือจากการดูคำตอบตลก) ใครสามารถสอนฉันได้บ้าง
Ryan Edwards

2
เปิดกลุ่มแล้วทำ ": สำหรับฉันในช่วง (1,255) | .put = '10 .0.0. '. i | endfor"
codygman

2
@ RyanEdwards อาจจะเติม / etc / hosts ได้
Ruslan

26
นี่คือคำตอบที่ยอดเยี่ยม ไม่ใช่บิตเกี่ยวกับการสร้างที่อยู่ IP แต่บิตที่บอกเป็นนัยว่าVIM สามารถใช้สำหรับวนซ้ำในคำสั่ง
dotancohen

4
โดยไม่ใช้โหมดอดีต:i10.0.0.1<Esc>Y254p$<C-v>}g<C-a>
BlackCap

47

นี่เป็นเคล็ดลับที่ดีในการเปิดไฟล์ปัจจุบันด้วยการเข้ารหัสที่แตกต่างกัน:

:e ++enc=cp1250 %:p

มีประโยชน์เมื่อคุณต้องทำงานกับการเข้ารหัสแบบดั้งเดิม การเข้ารหัสที่รองรับแสดงอยู่ในตารางด้านล่างencoding-values(ดูhelp encoding-values) สิ่งที่คล้ายกันยังใช้งานได้เพื่อ++ffให้คุณสามารถเปิดไฟล์ใหม่ด้วยบรรทัด Windows / Unix สิ้นสุดลงหากคุณทำผิดครั้งแรก (ดูhelp ff)


ไม่เคยมีการใช้การจัดเรียงของสิ่งนี้ แต่แน่นอนเราจะเพิ่มในคลังแสงของฉันของเทคนิค ...

เคล็ดลับที่ดีขอบคุณ สำหรับคะแนนโบนัสเพิ่มรายการการเข้ารหัสที่ถูกต้องทั่วไป
Adriano Varoli Piazza

2
ฉันใช้สิ่งนี้ในวันนี้ แต่ฉันคิดว่าฉันไม่จำเป็นต้องระบุ "%: p"; เพียงแค่เปิดไฟล์และ: e ++ enc = cp1250 ก็เพียงพอแล้ว I
Ivan Vučica

จะ: ตั้งค่าการเข้ารหัส = cp1250 มีผลเหมือนกันหรือไม่
laz

1
`: e + b% 'มีประโยชน์ในทำนองเดียวกันสำหรับการเปิดใหม่ในโหมดไบนารี (ไม่มีการขึ้นบรรทัดใหม่)
intuited

47

พิมพ์==จะแก้ไขการเยื้องของบรรทัดปัจจุบันตามบรรทัดด้านบน

ที่จริงแล้วคุณสามารถทำเครื่องหมายหนึ่ง = ตามด้วยคำสั่งการเคลื่อนไหวใด ๆ = {ขบวนการ}

ตัวอย่างเช่นคุณสามารถใช้การเคลื่อนไหว% ซึ่งย้ายระหว่างวงเล็บปีกกาที่ตรงกัน วางเคอร์เซอร์บน {ในรหัสต่อไปนี้:

if (thisA == that) {
//not indented
if (some == other) {
x = y;
}
}

และกด=%เพื่อรับสิ่งนี้ทันที:

if (thisA == that) {
    //not indented
    if (some == other) {
        x = y;
    }
}

อีกวิธีหนึ่งคุณสามารถทำ= a {ภายในบล็อคโค้ดได้แทนที่จะวางตำแหน่งไว้ที่อักขระ {


หืมฉันไม่รู้เรื่องนี้เกี่ยวกับการเยื้อง
Ehtesh Choudhury

ปกติไม่จำเป็นต้องอยู่บนเครื่องมือจัดฟัน คิดบ่อยครั้งฉันแค่=}หรือvaBaB=เพราะมันน้อยกว่า นอกจากนี้ยังv}}:!astyle -bjตรงกับสไตล์รหัสของฉันดีกว่า แต่ฉันสามารถทำให้มันกลับมาเป็นสไตล์ของคุณได้ง่ายๆด้วย%!astyle -aj
sehe

7
gg=Gค่อนข้างเรียบร้อยเมื่อวางในบางสิ่ง
kyrias

ที่เกี่ยวข้อง: การเยื้องโค้ดที่เยื้องเข้าไปที่ Vim SE
kenorb

@kyrias โอ้ฉันทำแบบggVG=นี้แล้ว
Braden สุดยอด

42
imap jj <esc>

7
คุณจะพิมพ์ jj อย่างไร? : P
hasen

6
คุณพิมพ์ jj บ่อยแค่ไหน? อย่างน้อยในภาษาอังกฤษ?
ojblass

50
ฉันทำการแมปใหม่เพื่อล็อค esc แทนเนื่องจากเป็นกุญแจที่ไม่มีประโยชน์ การทำแผนที่ของฉันเป็นระบบปฏิบัติการที่กว้างขวางดังนั้นมันจึงมีประโยชน์เพิ่มเติมโดยไม่ต้องกังวลกับการกดปุ่มโดยไม่ตั้งใจ ข้อเสียเปรียบเพียงอย่างเดียวคือมันยากที่จะตะโกนใส่ผู้คน :)
อเล็กซ์

7
@Alex: แน่นอนว่า capslock คือความตาย "เดี๋ยวก่อน wtf? โอ้นั่นคือ ZZ? .... อึ"
สัญชาตญาณ

5
@ojblass: ไม่แน่ใจว่ามีกี่คนที่ถูกต้องรหัส matlab ใน Vim แต่iiและjjใช้กันทั่วไปสำหรับตัวแปรตัวนับเพราะiและjถูกสงวนไว้สำหรับตัวเลขที่ซับซ้อน
brianmearns

37

เรามาดูการแก้ไข IDE เล็ก ๆ น้อย ๆ กันบ้างในการถ่ายโอนคอลัมน์

:%s/\(.*\)^I\(.*\)/\2^I\1/

คำอธิบาย

\(และ\)เป็นวิธีการจดจำสิ่งต่าง ๆ ใน regex-land และ\1, \2ฯลฯ เป็นวิธีที่จะดึงสิ่งที่จำได้

>>> \(.*\)^I\(.*\)

จำทุกอย่างตามด้วย^I(แท็บ) ตามด้วยทุกอย่าง

>>> \2^I\1

แทนที่สิ่งต่าง ๆ ข้างต้นด้วย "สิ่งที่ 2 ที่คุณจำได้" ตามด้วย "สิ่งที่ 1 ที่คุณจำได้" - โดยพื้นฐานแล้วจะทำการแปลงข้อมูล


4
สลับคอลัมน์คู่ที่คั่นด้วยแท็บ (ตัวคั่นโดยพลการมันคือ regex ทั้งหมด) ซึ่งกันและกัน
ความวุ่นวาย

39
นี่เป็นเพียง regex; IDE จำนวนมากมีการค้นหาและแทนที่ regex
rlbond

7
@rlbond - มันลงเอยว่าเอ็นจิ้น regex ใน IDE นั้นดีแค่ไหน Regexes ของ Vim นั้นทรงพลังมาก อื่น ๆ .. บางครั้งก็ไม่มาก
romandas

3
The * จะโลภดังนั้น regex นี้ถือว่าคุณมีเพียงสองคอลัมน์ หากคุณต้องการให้เป็น nongreedy ให้ใช้ {-} แทน * (ดู: ช่วยไม่โลภสำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวคูณ {})
Kimball Robinson

4
นี่เป็น regex ที่ค่อนข้างง่าย แต่มันก็แค่หนีวงเล็บกลุ่มที่ทำให้มันดูซับซ้อน
mk12

30

ไม่ตรงความลับดำมืด แต่ผมชอบที่จะนำการทำแผนที่ดังต่อไปนี้ลงในแฟ้ม .vimrc ของฉันดังนั้นฉันสามารถตี "-" (ลบ) ได้ตลอดเวลาเพื่อเปิดแฟ้มข้อมูลที่จะแสดงไฟล์ที่อยู่ติดกันกับคนที่ฉันเพิ่งแก้ไข ใน file explorer ฉันสามารถกด "-" อีกอันเพื่อเลื่อนขึ้นหนึ่งไดเรกทอรีให้การเรียกดูโครงสร้างไดเรกทอรีที่ซับซ้อนอย่างราบรื่น (เช่นที่ใช้โดยเฟรมเวิร์ก MVC ทุกวันนี้):

map - :Explore<cr>

สิ่งเหล่านี้อาจเป็นประโยชน์สำหรับใครบางคน ฉันชอบที่จะเลื่อนหน้าจอและเลื่อนเคอร์เซอร์ไปพร้อมกัน:

map <c-j> j<c-e>
map <c-k> k<c-y>

การนำทางแท็บ - ฉันชอบแท็บและฉันต้องการย้ายระหว่างแท็บเหล่านั้นได้อย่างง่ายดาย:

map <c-l> :tabnext<enter>
map <c-h> :tabprevious<enter>

สำหรับ Mac OS X เท่านั้น: การนำทางแท็บที่เหมือน Safari:

map <S-D-Right> :tabnext<cr>
map <S-D-Left> :tabprevious<cr>

นอกจากนี้คุณยังสามารถเรียกดูไฟล์ภายใน Vim ได้โดยใช้: Explore
Roman Plášil

สวัสดีชาวโรมันนี่คือสิ่งที่การแมปนี้ทำ แต่กำหนดให้กับ "ปุ่มลัด" :)
KKovacs

27

ฉันชอบใช้ 'sudo bash' และดูแลระบบของฉันไม่ชอบสิ่งนี้ เขาล็อค 'sudo' เพื่อให้สามารถใช้ได้กับคำสั่งเพียงไม่กี่คำเท่านั้น (ls, chmod, chown, vi, ฯลฯ ) แต่ฉันสามารถใช้ vim เพื่อรับรูตเชลล์ได้:

bash$ sudo vi +'silent !bash' +q
Password: ******
root#

9
FWIW, sudoedit (หรือ sudo -e) แก้ไขไฟล์ที่มีสิทธิ์ใช้งาน แต่รันเอดิเตอร์ของคุณในฐานะผู้ใช้ปกติของคุณ
RJHunter

12
ใช่ ... ฉันก็เกลียดคุณเหมือนกัน;) คุณควรจะต้องใช้รูทเชลล์อย่างมากแทบทุกอย่างยกเว้นว่าคุณมีนิสัยที่จะใช้คำสั่งมากเกินไปเพราะรูตซึ่งหมายความว่าสิทธิ์ของคุณหมดไป
พวกเราทุกคนโมนิก้า

5
ดูแลระบบของคุณทำไมถึงทำให้คุณรูต? : D
d33tah

26

บ่อยครั้งที่ฉันชอบเปลี่ยนไดเรกทอรีปัจจุบันขณะแก้ไข - ดังนั้นฉันต้องระบุพา ธ น้อยลง

cd %:h

สิ่งนี้ทำอะไร และมันทำงานกับ autchdir ได้ไหม?
Leonard

2
ฉันคิดว่ามันจะแทนที่ autochdir ชั่วคราว (จนกว่าคุณจะเปลี่ยนบัฟเฟอร์อีกครั้ง) โดยทั่วไปมันจะเปลี่ยนไดเรกทอรีเป็นไดเรกทอรีรากของไฟล์ปัจจุบัน มันช่วยให้ฉันควบคุมเองได้มากกว่าที่ autochdir ทำ
rampion

1
ชุด autochdir // นี้ยังทำหน้าที่การทำงานที่เหมือนกันและจะเปลี่ยนไดเรกทอรีปัจจุบันไปยังที่ของไฟล์ในบัฟเฟอร์
นาคราน

25

ฉันมักจะใช้หลายหน้าต่างเมื่อฉันทำงานในโครงการและบางครั้งฉันจำเป็นต้องปรับขนาดหน้าต่างเหล่านั้น นี่คือสิ่งที่ฉันใช้:

map + <C-W>+
map - <C-W>-

การแม็พเหล่านี้อนุญาตให้เพิ่มและลดขนาดของหน้าต่างปัจจุบัน มันค่อนข้างง่าย แต่ก็รวดเร็ว


16
นอกจากนี้ยังมี Ctrl-W = ซึ่งทำให้หน้าต่างมีความกว้างเท่ากัน
บิลลินช์

2
อย่าลืมว่าคุณสามารถเติมตัวเลขเพื่อดำเนินการหลาย ๆ ครั้งใน Vim ดังนั้นเพื่อขยายความสูงหน้าต่างปัจจุบัน 8 บรรทัด: 8 <CW> +
joeytwiddle

23

ไม่ใช่คุณสมบัติปิดบัง แต่มีประโยชน์มากและประหยัดเวลา

หากคุณต้องการบันทึกเซสชันของบัฟเฟอร์ที่เปิดแท็บเครื่องหมายและการตั้งค่าอื่น ๆ คุณสามารถออกรายการต่อไปนี้:

mksession session.vim

คุณสามารถเปิดเซสชันของคุณโดยใช้:

vim -S session.vim

5
คุณยังสามารถ:so session.vimเป็นกลุ่มใน
TankorSmash

22
:r! <command>

วางเอาต์พุตของคำสั่งภายนอกลงในบัฟเฟอร์

ทำคณิตศาสตร์และรับผลลัพธ์โดยตรงในข้อความ:

:r! echo $((3 + 5 + 8))

รับรายการของไฟล์ที่จะรวบรวมเมื่อเขียน Makefile:

:r! ls *.c

อย่ามองว่าข้อเท็จจริงที่คุณอ่านบนวิกิพีเดียมีอยู่ในเอกสารที่คุณเขียนโดยตรง:

:r! lynx -dump http://en.wikipedia.org/wiki/Whatever

14
^ R = 3 + 5 + 8 ในโหมดแทรกจะช่วยให้คุณใส่ค่าของนิพจน์ (3 + 5 + 8) ในข้อความที่มีการกดแป้นน้อยกว่า
Sudhanshu

ฉันจะรับผลลัพธ์ / ผลลัพธ์ไปยังบัฟเฟอร์ที่แตกต่างจากปัจจุบันได้อย่างไร
dcn


21

แมป F5 เพื่อ ROT13 บัฟเฟอร์ของคุณอย่างรวดเร็ว:

map <F5> ggg?G``

คุณสามารถใช้มันเป็นบอสคีย์ :)


14
ฉันไม่รู้ว่าคุณกำลังเขียนอะไร ... แต่แน่นอนเจ้านายของฉันจะอยากรู้อยากเห็นมากขึ้นเมื่อเขาเห็นฉันเขียนสับสน ROT13 :)
sehe

หรือหลอกเพื่อนของคุณ: nmap i ggg?G`` . หรือโหดร้าย: nmap i ggg?G``i!
romeovs

1
@romeovs อันที่ 2 คือวงวนไม่สิ้นสุดใช้ nnoremap
Amit Gold

19

ฉันเพิ่งพบสิ่งนี้ในวันนี้ผ่านNSFAQ :

บล็อกความคิดเห็นของรหัส

เข้าสู่โหมด Blockwise Visual โดยกดปุ่ม CTRL-V

ทำเครื่องหมายบล็อกที่คุณต้องการแสดงความคิดเห็น

กด I (ตัวใหญ่ตัวพิมพ์ใหญ่) และป้อนสตริงความคิดเห็นของคุณที่จุดเริ่มต้นของบรรทัด (// สำหรับ C ++)

กดปุ่ม ESC และทุกบรรทัดที่เลือกจะมี // ต่อท้ายด้านหน้าของบรรทัด


ฉันเพิ่ม # เพื่อแสดงความคิดเห็นบล็อกของรหัสในทับทิม ฉันจะยกเลิกมันได้อย่างไร
Neeraj Singh

3
คุณสามารถกด ctrl + v อีกครั้งทำเครื่องหมาย // และกด x เพื่อ "uncomment"
nos

6
ฉันใช้ NERDCommenter สำหรับสิ่งนี้
ZyX

1
รหัสที่ใส่ความเห็นอาจเป็นหนึ่งในประเภทความคิดเห็นที่แย่ที่สุดที่คุณอาจใส่ในรหัสของคุณ มีการใช้งานที่ดีขึ้นสำหรับการแทรกบล็อกที่ยอดเยี่ยม
Braden สุดยอด

1
@Pie เพราะออกความเห็นรหัสคือรหัสที่ตายแล้ว รหัสเดดซีไม่มีจุดประสงค์ที่เป็นประโยชน์และสร้างความยุ่งเหยิง คุณคิดว่าคุณกำลังรักษารหัสที่คุณอาจต้องการนำกลับมาในภายหลัง แต่ก็มีวิธีที่ดีกว่าเสมอ คุณสามารถใช้ประวัติการเลิกทำของคุณคุณสามารถดักไฟล์หรือใช้ git ซึ่งมีฟังก์ชั่นนี้ในตัว ( git checkout) สำหรับการใช้งานที่ดีขึ้นสำหรับการแทรกบล็อกไม่มีชุดใดในหิน คุณเพียงแค่ใช้มันทุกครั้งที่คุณมีหลายบรรทัดที่คุณต้องการแทรกลำดับของอักขระเดียวกันในที่เดียวกัน
Braden ที่ดีที่สุด

17

ฉันใช้เสียงเรียกเข้าสำหรับแก้ไขข้อความใด ๆ ที่ฉันทำบ่อยครั้งฉันใช้คัดลอกและวาง ปัญหาคือเสียงเรียกตามค่าเริ่มต้นมักจะบิดเบือนข้อความที่นำเข้าผ่านการวาง วิธีที่จะหยุดสิ่งนี้คือการใช้

:set paste

ก่อนที่จะวางในข้อมูลของคุณ สิ่งนี้จะป้องกันไม่ให้เลอะ

โปรดทราบว่าคุณจะต้องออก:set nopasteการกู้คืนการเยื้องอัตโนมัติ ทางเลือกอื่นของการวางข้อความที่จัดรูปแบบไว้ล่วงหน้าคือการลงทะเบียนคลิปบอร์ด ( *และ+) และ:r!cat (คุณจะต้องจบส่วนที่วางด้วย ^ D)

บางครั้งการเปิดโทนสีที่มีความเปรียบต่างสูงก็เป็นประโยชน์เช่นกัน ซึ่งสามารถทำได้ด้วย

:color blue

ฉันสังเกตเห็นว่ามันใช้งานไม่ได้กับทุกเวอร์ชั่นของเสียงเรียกเข้าที่ฉันใช้ แต่มันใช้งานได้ดีที่สุด


10
"การบิดเบือน" เกิดขึ้นเนื่องจากคุณเปิดใช้งานการเยื้องอัตโนมัติบางรูปแบบ การใช้set pasteหรือการระบุคีย์สำหรับpastetoggleตัวเลือกนั้นเป็นวิธีการทั่วไปในการแก้ไขปัญหานี้ แต่เอฟเฟกต์แบบเดียวกันนี้สามารถทำได้ด้วยset mouse=aเช่นกัน Vim รู้ว่าน้ำท่วมของข้อความที่เห็นเป็นเมาส์ที่ถูกทริกเกอร์
jamessan

1
หากคุณติดตั้ง gvim อยู่บ่อยครั้งคุณสามารถ (แม้ว่ามันจะขึ้นอยู่กับสิ่งที่ตัวเลือกของคุณรวบรวม distro vim ด้วย) ให้ใช้คลิปบอร์ด X โดยตรงจาก vim ผ่าน * register ตัวอย่างเช่น"*pการวางจาก X xlipboard (มันทำงานได้จากที่เป็นกลุ่มขั้วเกินไปก็เพียงว่าคุณอาจต้องแพคเกจ gvim หากพวกเขากำลังที่แยกต่างหาก)
Kyrias

2
@kyrias สำหรับบันทึก*คือการPRIMARYลงทะเบียน ("คลิกกลาง") คลิปบอร์ดเป็น+
Braden ที่ดีที่สุด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.