คำสั่ง Vim แบบง่าย ๆ ที่คุณต้องการก่อนหน้านี้ [ปิด]


378

ฉันเรียนรู้คำสั่งใหม่ใน Vim ตลอดเวลา แต่ฉันแน่ใจว่าทุกคนเรียนรู้สิ่งใหม่เป็นครั้งคราว ฉันเพิ่งเรียนรู้เกี่ยวกับเรื่องนี้:

zz, zt, zb - เคอร์เซอร์ตำแหน่งที่อยู่ตรงกลางด้านบนหรือด้านล่างของหน้าจอ

อะไรคือคำสั่งที่มีประโยชน์หรือสง่างามอื่น ๆ ที่คุณต้องการให้คุณเรียนรู้เมื่อนานมาแล้ว


46
ในทางเทคนิค zz, zt, zb กำลังวางตำแหน่งหน้าจอด้วยเคอร์เซอร์ที่ตรงกลาง / บน / ล่าง เพื่อวางเคอร์เซอร์ที่ตำแหน่งกลาง / บน / ล่างใช้ M, H หรือ L คำสั่งทั้งสองชุดมีประโยชน์
ปีเตอร์

1
อ่านโพสต์เดือนนี้หรือปีที่ผ่านมาตั้งแต่ช่วยฉันทุกวัน dap เป็นสิ่งที่ฉันใช้เพื่อย้ายย่อหน้าหลายครั้งต่อชั่วโมงขอบคุณที่โพสต์นี้
Funkodebat

33
ฉันไม่เคยได้รับลูกเล่นมากมายจากหน้าเว็บที่ถูกทำเครื่องหมายว่าไม่สร้างสรรค์ :) ขอบคุณทุกคน
Tasos Bitsios

คำตอบ:


315

ฉันหวังว่าฉันจะรู้ว่าคุณสามารถใช้CtrlCแทนEscการเปลี่ยนจากโหมดแทรก นั่นคือการเพิ่มผลผลิตที่แท้จริงสำหรับฉัน


93
ฉันทำการแมป Caps-Lock ของฉันใหม่เป็น Esc นั่นง่ายกว่าทั้ง Esc และ Ctrl-C ทั่วไป
Kasper

114
อึศักดิ์สิทธิ์ 15 ปีของ vi และฉันไม่เคยรู้ว่าเรื่องนี้ ...
คริสเค

31
อีกความนิยมคือการใช้ 'jj' สำหรับ ESC ฉันชอบวิธีการนี้จนถึงตอนนี้ :แผนที่! jj <ESC>
claytron

27
คุณสามารถใช้ CTRL- [(ซึ่งฉันชอบเพราะมันเป็นนิ้วมือเล็ก ๆ ... แค่หมุนมือทั้งสองข้างเล็กน้อย)
เจสันลง

42
ใช้ 'jk' เป็นตัวแปรใน @ Claytron's หากคุณไม่รู้ว่าอยู่ในโหมด INSERT แล้ว jk จะปล่อยให้คุณไปที่ที่คุณอยู่ดังนั้นคุณสามารถกดได้ทุกเมื่อ (เครดิต: มีคนอื่น ... ไม่ใช่ความคิดของฉัน)
Kyle

197

เคล็ดลับ "ว้าว" ล่าสุดที่ฉันได้เรียนรู้เป็นวิธีการทำการค้นหาและแทนที่ที่ซับซ้อน บ่อยครั้งในอดีตที่ผ่านมาฉันมี regexp ที่ซับซ้อนมากที่จะทำการทดแทนและมันก็ไม่ได้ผล มีวิธีที่ดีกว่าคือ

:set incsearch             " I have this in .vimrc
/my complicated regexp     " Highlighted as you enter characters
:%s//replace with this/    " You don't have to type it again

"เคล็ดลับ" ที่นี่ (เพื่อต้องการคำที่ดีกว่า) เป็นวิธีที่คุณสามารถใช้การค้นหาเพื่อสร้าง regexp (และ 'incsearch' ไฮไลต์เมื่อคุณป้อนอักขระ) จากนั้นใช้รูปแบบที่ว่างเปล่าในการทดแทน: ว่างเปล่า รูปแบบเริ่มต้นเป็นรูปแบบการค้นหาล่าสุด

ตัวอย่าง:

/blue\(\d\+\)
:%s//red\1/

เทียบเท่ากับ:

:%s/blue\(\d\+\)/red\1/

ดู:

:help 'incsearch'
:help :substitute

1
ว้าว ... ฉันกำลังมองหาบางสิ่งเช่นนี้
figurassa

1
ใช่ฉันหวังว่าฉันจะรู้เรื่องนี้เร็วกว่านี้ แต่แล้วอีกครั้งนั่นคือสิ่งที่ฉันพูดเกี่ยวกับทุกสิ่งที่ฉันเรียนรู้ว่าเป็นเรื่องใหม่ในกลุ่ม
Robert Massaioli

26
สำหรับทุกคนที่รักสิ่งนี้ลองกด<Ctrl-R>/เพื่อแทรกคำค้นหาล่าสุด (ดู:help i_CTRL-R) มีประโยชน์จริง ๆ สำหรับคล้ายกับด้านบน แต่คุณต้องการจับภาพบางส่วนของผลการค้นหา (เช่นนี้%s:/\\([fF]rank\\) and mary/marie and \1/g)
idbrii

4
:%s//...ใช้ได้กับ*(คำค้นหาใต้เคอร์เซอร์) ปลั๊กอินที่เรียกว่า visual-star-search จะขยายฟังก์ชันการทำงานของ*ให้ตรงกับข้อความทั้งหมดของการเลือกภาพซึ่งทำให้ง่ายต่อการค้นหาและแทนที่ข้อความที่เลือกเช่นv3e(เลือก 3 คำที่มองเห็นได้) *(ค้นหา) และ:%s//replacement/g(แทนที่ทั้งหมดที่เกิดขึ้นด้วย " ทดแทน ") ฉันใช้สิ่งนี้บ่อยครั้งที่ฉันมีการแมปสำหรับคำสั่งการแทนที่ทั่วโลก: :nmap <Leader>s :%s///g<left><left>.
Patrick Oscity

1
@idbrii เนื่องจากคนที่อ่านอาจเป็นกลุ่ม Vim noobs (ฉัน) %s:ควร:%sและสำหรับระบบของฉันฉันต้องการ\(\)แทน\\(\\)
Charlie Gorichanaz

155

ฉันสร้างการอ้างอิงของคำสั่งที่ใช้มากที่สุดนี้ให้เพื่อนของฉัน:

select                                   v
select row(s)                            SHIFT + v
select blocks (columns)                  CTRL  + v
indent selected text                     >
unindent selected text                   <
list buffers                             :ls
open buffer                              :bN (N = buffer number)
print                                    :hardcopy
open a file                              :e /path/to/file.txt
                                         :e C:\Path\To\File.txt
sort selected rows                       :sort
search for word under cursor             *
open file under cursor                   gf
  (absolute path or relative)
format selected code                     =
select contents of entire file           ggVG
convert selected text to uppercase       U
convert selected text to lowercase       u
invert case of selected text             ~
convert tabs to spaces                   :retab
start recording a macro                  qX (X = key to assign macro to)
stop recording a macro                   q
playback macro                           @X (X = key macro was assigned to)
replay previously played macro *         @@
auto-complete a word you are typing **   CTRL + n
bookmark current place in file           mX (X = key to assign bookmark to)
jump to bookmark                         `X (X = key bookmark was assigned to
                                             ` = back tick/tilde key)
show all bookmarks                       :marks
delete a bookmark                        :delm X (X = key bookmark to delete)
delete all bookmarks                     :delm!
split screen horizontally                :split
split screen vertically                  :vsplit
navigating split screens                 CTRL + w + j = move down a screen
                                         CTRL + w + k = move up a screen
                                         CTRL + w + h = move left a screen
                                         CTRL + w + l = move right a screen
close all other split screens            :only

*  - As with other commands in vi, you can playback a macro any number of times.
     The following command would playback the macro assigned to the key `w' 100
     times: 100@w

** - Vim uses words that exist in your current buffer and any other buffer you may have open for auto-complete suggestions.

คุณแสดงรายการ "~ X" เพื่อไปที่เครื่องหมายที่มีชื่อ X ซึ่งไม่ได้ผลสำหรับฉัน - ฉันใช้ "'X" (เครื่องหมายคำพูดเดี่ยว) แทน

ว้าว. สิทธิของคุณอย่างแน่นอน ตอนที่ฉันพิมพ์ไกด์ฉันคิดว่าตาของฉันเห็นเพียงตัวหนอน ฉันจะอัปเดตตามนั้น ขอบคุณสำหรับหัวขึ้น.
ไบรอันนิวแมน

5
รายการนี้ดี แต่ฉันอยากรู้ว่าคุณวาดตารางนี้อย่างไร กับ VIM? ปลั๊กอินตัวไหน ฉันกำลังมองหาหนึ่งในขณะนี้
Kent

6
ฉันใช้ VIM แต่ไม่มีปลั๊กอิน อย่างไรก็ตาม; การใช้คุณสมบัติบล็อกแบบเลือกทำให้มันค่อนข้างง่าย ดีใจที่คุณพบรายการมีประโยชน์! ~ brian
brian newman

11
Ctrl-Q สำหรับการเลือกบล็อกเป็นลักษณะเฉพาะของ mswin.vim ที่อนุญาตให้วาง CTRL-V ผู้ใช้กลุ่มส่วนใหญ่จะพิจารณาความชั่วร้ายนี้และปิดการใช้งาน mswin.vim "+ P หรือ Ctrl-R + นั้นไม่ยากที่จะพิมพ์เพื่อแทรกเนื้อหาของคลิปบอร์ด
เบอนัวต์

144

giเปลี่ยนเป็นโหมดแทรกโดยวางเคอร์เซอร์ไว้ที่ตำแหน่งเดิม


29
ฉันมีความสุขมากเมื่อฉันรู้ว่าg;ตอนนี้สิ่งนี้ทำให้ฉันน้ำตา :-)
Patrick Oscity

@ longdeqidao ไม่ได้เลย มันกลับไปที่จุดแทรกสุดท้าย ดังนั้นคุณสามารถเลื่อนไปที่เนื้อหาในใจของคุณและมันจะดึงคุณกลับไปยังตำแหน่งที่คุณใส่ล่าสุด
Cyber ​​Oliveira

9
FYI, g; (ซึ่ง @PatrickOscity ที่อ้างถึงด้านบน) วางเคอร์เซอร์ในตำแหน่งที่มีการแก้ไข คุณสามารถใช้มันได้หลายครั้งเพื่อย้อนกลับไปในประวัติศาสตร์ สังเกตที่นี่เพราะความช่วยเหลือเป็นกลุ่มของฉันไม่ได้พูดถึงเรื่องนี้ด้วยเหตุผลแปลก ๆ
PonyEars

13
ความหยั่งรู้ของ Vim ไม่สิ้นสุดที่จะทำให้ฉันประทับใจ ตั้งแต่ @PonyEars พูดถึงg;ฉันพยายามถ้า "ตรงกันข้าม" ของมันจะเป็นg,และแท้จริงและดูเถิดเราสามารถย้อนกลับไปข้างหน้า!
Cyber ​​Oliveira

aสั้นกว่า :) แต่giใช้งานง่ายมากโดยgปกติแล้วจะเป็นการทำงานที่ตรงกันข้าม
Erwin Rooijakkers

105
: Q!

ฉันหวังว่าฉันจะรู้ว่าก่อนที่ฉันจะเริ่ม vi เป็นครั้งแรก


23
ในฐานะที่เป็นผู้ชาย emacs นั่นคือความคิดเห็นที่สนุกที่สุดที่ฉันได้อ่าน ไม่แน่ใจว่าคุณตั้งใจจะทำ คุณทำให้ฉันมีความสุขวันนี้
pjammer

29
ฉันจำได้ว่าพยายามเป็นกลุ่มและ emacs เป็นครั้งแรกในวันเดียวกันโดยไม่รู้วิธีออกเช่นกัน ฉันคิดกับตัวเองว่าคนเหล่านี้ห่าอะไรผิดปกติ!
physicsmichael

13
+1 ในครั้งแรกที่คุณเริ่มเป็นกลุ่มข้อความเริ่มต้นควรเป็น "เขียน: q เพื่อออก" ฉันจะประหยัดเวลาได้มากฮ่า ๆ
JoséRamón

2
@ JoséRamón แต่มันจะแสดงบนหน้าจอโดยค่าเริ่มต้นถ้าคุณป้อนเสียงเรียกเข้าโดยไม่ต้องเปิดไฟล์ สิ่งนี้ถูกเพิ่มเมื่อเร็ว ๆ นี้? ฉันจำได้ชัดเจนว่าลองใช้กลุ่มเสียงเมื่อหลายปีก่อนและมันก็มีอยู่แล้ว นอกจากนี้ยังบอกให้คุณใช้:q!ถ้าคุณพยายามที่จะออกโดยไม่บันทึกบัฟเฟอร์
mechalynx

5
@ivy_lynx ใช่คุณอาจพูดถูก แต่ถ้าคุณเปิดเสียงเรียกเข้าโดยไม่มีไฟล์ โดยปกติแล้วครั้งแรกที่คุณเปิด vim นั้นเป็นเพราะคุณจำเป็นต้องแก้ไขไฟล์ config ใน Unix ดังนั้นคุณจึงเขียน "$ vim file" และคุณไม่สามารถหาทางออกได้ หรือฉันเป็นคนเดียว?
JoséRamón

56

^ XFเสร็จสิ้นโดยใช้ชื่อไฟล์จากไดเรกทอรีปัจจุบัน ไม่มีการคัดลอก / วางจากเครื่องปลายทางหรือการตรวจสอบซ้ำสองครั้งอย่างเจ็บปวด

^ XPเสร็จสิ้นโดยใช้คำในไฟล์ปัจจุบัน

: set scrollbindบังคับให้บัฟเฟอร์หนึ่งเลื่อนไปข้างๆ เช่นแยกหน้าต่างของคุณออกเป็นบานหน้าต่างแนวตั้งสองบาน โหลดหนึ่งไฟล์ในแต่ละไฟล์ (อาจเป็นไฟล์เดียวกันในเวอร์ชันที่ต่างกัน) ทำ:set scrollbindในแต่ละ ตอนนี้เมื่อคุณเลื่อนไปหนึ่งบานหน้าต่างทั้งสองจะเลื่อนพร้อมกัน เหมาะอย่างยิ่งสำหรับการเปรียบเทียบไฟล์


วิธีปิดการใช้งาน scrollbind เมื่อฉันเปิดใช้งานมัน
Amjith

2
jinxed_coder : :set noscbเพื่อปิดและใช้:set scbเพื่อเปิด (ไม่:scrollbind) :h scrollbind
jmdeldin

อ๊ะ แก้ไขแล้วสำหรับ ': set scrollbind'
46432 Brian Agnew

7
^ XPเสร็จสิ้นด้วยการตั้งค่าคำก่อนหน้าในไฟล์^ XNพร้อมการตั้งค่าตามคำต่อไปในไฟล์
u0b34a0f6ae

คุณสามารถไฟล์ยังต่างโดยการเปิด file1 และทำงานหรือเพิ่งเริ่มเป็นกลุ่มที่มี:diffsplit file2 vim -d file1 file2Vim เลื่อนดูทั้งสองไฟล์โดยอัตโนมัติ
Brian McCutchon

51

คุณสามารถใช้คำสั่งทั้งชุดเพื่อเปลี่ยนข้อความภายในวงเล็บเหลี่ยม / วงเล็บ / เครื่องหมายคำพูด / แท็ก มันมีประโยชน์มากในการหลีกเลี่ยงการเริ่มต้นและสิ้นสุดของกลุ่ม ลองci(, ci{, ci<, ci", ci', ctขึ้นอยู่กับประเภทของวัตถุที่คุณต้องการเปลี่ยน และca(, ca{, ...ตัวแปรจะลบเครื่องหมายวงเล็บ / คำพูดด้วย

ง่ายต่อการจดจำ: เปลี่ยนคำสั่งที่อยู่ในวงเล็บ / เปลี่ยนคำสั่งที่มีวงเล็บ


16
cนี้ไม่ได้เป็นเพียงสำหรับ คุณสามารถทำเช่นนี้กับdลบ (เช่น di (หรือดา () yจะงัด, vเพื่อเลือก ฯลฯ
นาธาน Fellman

สวัสดี! ฉันต้องการทราบว่ามีเอกสารสำหรับการใช้งานนี้:helpหรือไม่ ฉันไม่พบที่ใดก็ได้ > _ <
Matej

1
@ ปีเตอร์ฉันเคยตรวจสอบสิ่งเหล่านั้นก่อนหน้านี้ แต่ไม่พบการกล่าวถึงพฤติกรรมที่แปลกประหลาด "ภายใน + ตัวคั่น" กลายเป็นว่าอยู่ใน:help motion.txt! ขอบคุณ!
Matej

2
เคล็ดลับนี้เป็นเหตุผลเดียวทำไมฉันเปลี่ยนไป vi ในสถานที่แรก :)
จัสตินลิตร

1
หากคุณกำลังแก้ไข HTML หรือ XML คุณสามารถใช้citเพื่อเปลี่ยนเนื้อหาของแท็กปัจจุบัน ยกตัวอย่างเช่นใน<span>Some text</span>ถ้าเคอร์เซอร์ของคุณอยู่ในช่วง "m" ที่คุณสามารถทำได้เพื่อให้ได้dit <span></span>
Jonathan Potter

47
  1. อย่ากดปุ่มEscเลย ดูคำตอบนี้เพื่อเรียนรู้ว่าทำไม ดังกล่าวข้างต้นCtrl+ Cเป็นทางเลือกที่ดีกว่า ฉันขอแนะนำให้ทำแผนที่Caps Lockกุญแจของคุณเพื่อหลบหนี

  2. หากคุณกำลังแก้ไขctagsภาษาที่รองรับการใช้ไฟล์แท็กและ:ta, Ctrl+ ]ฯลฯ เป็นวิธีที่ดีที่จะนำทางรหัสแม้ในหลายไฟล์ นอกจากนี้การใช้Ctrl+ NและCtrl+ Pการใช้ไฟล์แท็กก็เป็นวิธีที่ยอดเยี่ยมในการลดการกดแป้น

  3. หากคุณกำลังแก้ไขบรรทัดที่ล้อมรอบเพราะมันกว้างกว่าบัฟเฟอร์ของคุณคุณสามารถเลื่อนขึ้น / ลงโดยใช้ gk และ gj

  4. พยายามเน้นการใช้คำสั่งการเคลื่อนไหวอย่างมีประสิทธิภาพก่อนที่คุณจะเรียนรู้นิสัยที่ไม่ดี สิ่งที่ต้องการใช้ 'dt' หรือ 'd3w' แทนที่จะกด xa หลายครั้ง โดยทั่วไปเวลาใดก็ตามที่คุณพบว่าตัวเองกดปุ่มเดิมซ้ำ ๆ อาจมีวิธีรัดกุมดีขึ้น / เร็วขึ้น / มากขึ้นในการบรรลุสิ่งเดียวกัน


11
อย่าใช้ Escape หรือ นั่นเป็นเรื่องนอกรีต Escape เป็นเพื่อนที่ดีที่สุดของคุณทั้งในและนอกงาน
xcramps

28
ถ้ามันเป็นเพื่อนที่ดีทำไมมันถึงอยู่ไกลบนคีย์บอร์ด?
39; s แอนโธนี

เพราะ 99% ของคนไม่เคยใช้มัน
Stefano Borini

5
ปุ่ม Escape แยกออกจากปุ่มอื่น ๆ ด้วยสองสามนิ้วบนแป้นพิมพ์ของฉัน คุณไม่ควรพลาด
23490 Brian

15
# 3 น่ากลัว! ยังคงเรียนรู้สิ่งใหม่ ...
นิวแมน brian

45

ปุ่มดอกจัน*จะค้นหาคำที่อยู่ใต้เคอร์เซอร์

[+ Tabจะนำคุณไปสู่นิยามของฟังก์ชัน C ที่อยู่ใต้เคอร์เซอร์ของคุณ (มันไม่ได้ผลเสมอไป)


1
ลอง 'man ctags' หากคุณใช้ * nix เพื่อเรียนรู้วิธีสร้างไฟล์ "แท็ก" ที่บอกคำสั่งวิธีการค้นหาคำจำกัดความของฟังก์ชั่นหรือตัวแปรในหลายภาษานอกเหนือจาก C ใช้ ctrl +] เพื่อค้นหาคำจำกัดความ ของโทเค็นใต้เคอร์เซอร์ของคุณหรือใช้: tag tokenToFind เพื่อค้นหาโทเค็นใด ๆ ที่รู้ คุณสามารถเริ่ม vim ด้วย "vim -t tokenToFind" เพื่อเปิดไฟล์ที่เหมาะสมและวางเคอร์เซอร์ไว้ที่ฟังก์ชันที่คุณต้องการแก้ไข
Adam Liss

23
ปุ่ม # จะค้นหาในทิศทางตรงกันข้ามสำหรับคำที่อยู่ใต้เคอร์เซอร์
Funkodebat

github.com/bronson/vim-visual-star-searchเปิดใช้งานการค้นหาดาวสำหรับการเลือกภาพ ฉันไม่ต้องการที่จะพลาดมันอีกต่อไป
Patrick Oscity

[ + Tab จะทำงานตลอดเวลาเมื่อคุณขยายpathโฟลเดอร์ที่ต้องการเช่นset path+=path/to/files
dlmeetei

43

ZZ(ทำงานเหมือน:wq)

และเกี่ยวกับตำแหน่งเคอร์เซอร์: ฉันพบว่าเคอร์เซอร์ที่อยู่ตรงกลางของหน้าจอนั้นเท่ห์ -

set scrolloff=9999

2
ไม่ทราบว่า :xทำเช่นนั้นด้วย
sa125

18
ไม่ถูกต้องทั้งหมด ทำงานเหมือน:xซึ่งจะบันทึกไฟล์เฉพาะเมื่อมีการเปลี่ยนแปลงในขณะที่:wqบันทึกไฟล์เสมอ
Erik B

ZQ (ทำงานเหมือน: q!)
xialu

42

บางส่วนของการเพิ่มล่าสุดของฉันไปที่ร้านสมองของฉัน:

  • ^wi: ข้ามไปที่แท็กใต้เคอร์เซอร์โดยแยกหน้าต่าง
  • cib/ciB: เปลี่ยนข้อความภายในชุดวงเล็บปัจจุบัน () หรือวงเล็บปีกกา {} ตามลำดับ
  • :set listchars=tab:>-,trail:_ list: แสดงแท็บ / ช่องว่างต่อท้ายที่มองเห็นแตกต่างจากช่องว่างอื่น ๆ ช่วยได้มากกับการเขียนโค้ด Python

4
ต้องใช้คะแนนเสียงมากขึ้น! cibดีมาก.
Matt Parker

ยัง: ciw เพื่อเปลี่ยนคำปัจจุบัน (หรือ caw เหมือนกัน แต่มือซ้ายเท่านั้น) ciW เพื่อเปลี่ยนปัจจุบัน W = o. (rd) Sames กับ v แทน c จะเลือกในภาพแทนการเปลี่ยน
lajarre

5
cib เทียบเท่ากับการพิมพ์ "ci (" คุณยังสามารถทำ "ci [", "ci {" หรือ (หาก vimrc ของคุณตั้งค่าไว้อย่างถูกต้อง) "ci <" สำหรับวงเล็บประเภทอื่น
Tom Lord

2
นอกจากนี้ "cit" เพื่อเปลี่ยนข้อความภายในแท็ก มีประโยชน์มากเมื่อทำงานกับ XML / HTML
วอลเตอร์

เป็นมูลค่าการกล่าวขวัญว่าคุณสามารถต่อท้ายด้วยวงเล็บปีกกาปิดแทนถ้าคุณต้องการที่ นอกจากนี้ฉันเพิ่งเรียนรู้เกี่ยวกับci}& cit- ว้าวสิ่งนี้จะมีประโยชน์มาก vi[m]กำลังพิสูจน์โปรแกรมที่น่าตื่นเต้นมาก!
underscore_d

37

gvเริ่มโหมดภาพและเลือกสิ่งที่คุณเลือกไว้ก่อนหน้านี้โดยอัตโนมัติ


34

: shellเพื่อเรียกใช้เชลล์คอนโซลจาก Vim มีประโยชน์เมื่อคุณต้องการทดสอบสคริปต์โดยไม่ต้องใช้ Vim เพียงกด^ dเมื่อคุณทำกับคอนโซลเชลล์จากนั้นคุณกลับมาที่ Vim และไฟล์ที่แก้ไขของคุณ


ฉันเดา:!shยากเกินไป ฉันชอบที่ว่าเพราะมันง่ายต่อการเขียนบรรทัดคำสั่งโดยใช้ / ลงทะเบียนสำเร็จจากบัฟเฟอร์ปัจจุบันหรือการใช้งานเช่น%/ %:hสำหรับชื่อไฟล์ปัจจุบัน / dirname ฯลฯ
sehe

1
อันนี้เท่ห์มาก ฉันใช้มันทุกวัน .. ก่อนหน้านั้นมันเป็น: wq, ทำสิ่ง cli, เปิด vim ด้วยไฟล์เดียวกัน .. การปรับแต่งที่ยอดเยี่ยม
Flashin

7
Ctrl-Z เพื่อสลับไปยังเชลล์และ fg <ENTER> เพื่อกลับไปเป็นกลุ่ม
Mario G.

ใส่map <Esc>! :shell<CR>ในของคุณ.vimrcและคุณสามารถเปิดเปลือกได้ด้วย Alt + !, หรือ Alt + Shift + 1 (ตัวช่วยจำ: :!{cmd}ดำเนินการ{cmd}กับเชลล์)
musiphil

:shellจะเริ่มระดับเชลล์ที่ซ้อนกันใหม่ ในขณะที่ctrl-zไม่ได้
wisbucky


31

vimcryption

vim -x filename.txt

คุณจะถูกถามหาข้อความรหัสผ่านแก้ไขและบันทึก ตอนนี้เมื่อใดก็ตามที่คุณเปิดไฟล์ใน vi อีกครั้งคุณจะต้องป้อนรหัสผ่านเพื่อดู


ซิงค์สิ่งนี้กับดรอปบ็อกซ์ของคุณและคุณจะได้รับตัวจัดการรหัสผ่านที่ดีจริง ๆ ;-)
Luis Nell

15
แต่โปรดทราบว่านอกจากคุณset cryptmethod=blowfish(มีให้เฉพาะใน 7.3+) มันจะใช้อัลกอริทึมที่มีความแข็งแรงที่น่าหัวเราะ ดูhelp encryptionรายละเอียดเพิ่มเติม
AB

3
โปรดอย่าใช้การเข้ารหัสเป็นกลุ่มไม่ใช่การเข้ารหัสที่ดีและการรักษาความปลอดภัยที่เลวร้ายยิ่งกว่าใคร ข้อมูลเพิ่มเติม: github.com/neovim/neovim/issues/694
rodrigoq

2
dgl.cx/2014/10/vim-blowfish meta-tldr: "แก้ไขใน Vim 7.4.399 [ groups.google.com/forum/#!msg/vim_dev/D8FyRd0EwlE/bkBOo-hzTzoJ]เพื่อความเข้ากันได้แบบย้อนหลัง เป็น cryptmethod ใหม่ดังนั้นใช้:set cm=blowfish2"
underscore_d

28

สร้างและแก้ไขรหัสของคุณจากภายในกลุ่ม!

องค์ประกอบ

ไม่มากจริง ๆ คุณต้องการMakefileในไดเรกทอรีปัจจุบัน

เพื่อรวบรวม

ขณะที่คุณอยู่ในกลุ่มให้พิมพ์:makeเพื่อเรียกใช้เชลล์และสร้างโปรแกรมของคุณ ไม่ต้องกังวลเมื่อเอาต์พุตเลื่อนตาม เพียงกดEnterเมื่อเสร็จสิ้นเพื่อกลับไปเป็นกลุ่ม

เวทย์มนต์

กลับมาเป็นกลุ่มคุณมีคำสั่งต่อไปนี้ตามที่คุณต้องการ:

  1. :cl แสดงรายการข้อผิดพลาดคำเตือนและข้อความอื่น ๆ
  2. :ccแสดงข้อความข้อผิดพลาด / คำเตือนปัจจุบันที่ด้านล่างของหน้าจอและข้ามไปยังบรรทัดที่ละเมิดในรหัสของคุณ
  3. :cc nกระโดดไปnTHข้อความ
  4. :cn เลื่อนไปยังข้อความถัดไป
  5. :cp ข้ามไปยังข้อความก่อนหน้า

มีมากขึ้น; หากคุณสนใจพิมพ์:help :ccจากภายในกลุ่ม


1
ทำงานได้มากกว่าการคอมไพล์โค้ด งานที่เขียนใน makefile คือการใช้งานที่ยอดเยี่ยมสำหรับสิ่งนี้
Dwight Spencer

25

^ P และ ^ N

กรอกข้อความก่อนหน้า (^ P) หรือข้อความถัดไป (^ N) ให้สมบูรณ์

^ O และ ^ I

ไปที่ตำแหน่งก่อนหน้า (^ O - "O" สำหรับเก่า) หรือถัดไป (^ I - "I" ใกล้กับ "O")

เมื่อคุณทำการค้นหาแก้ไขไฟล์ ฯลฯ คุณสามารถไปที่ "ข้าม" ไปข้างหน้าและข้างหลัง

เครื่องหมาย

กดma (m- เครื่องหมาย - ชื่อของเครื่องหมาย) หลังจากนั้นจะกลับไปที่ตำแหน่งประเภท`


1
ว้าวฉันไม่รู้เกี่ยวกับ ^ O และ ^ I: มันยอดเยี่ยม อาจมีค่ารวมถึง:help jump-motionsคำตอบของคุณในกรณีที่ใครต้องการข้อมูลเพิ่มเติม
DrAl

ตรวจสอบ ShowMarks vim.org/scripts/script.php?script_id=152 มันจะช่วยให้คุณจดจำตำแหน่งและเครื่องหมายทั้งหมดของคุณในบัฟเฟอร์ คุณสามารถสลับการเปิดและปิดการแสดงภาพด้วย \ mt
ผู้ทดสอบ

ฉันไม่ได้รับความแตกต่างระหว่าง ^ P และ ^ N ...
lajarre

@lajarre พวกเขาวนรายการความสำเร็จที่มีอยู่ในทิศทางตรงกันข้าม
Patrick Oscity

2
ฉันมักจะใช้ ^ O ^ O เมื่อเปิด Vim หลังจากฉันสังเกตเห็นว่าฉันต้องการแก้ไขไฟล์ที่แก้ไขล่าสุดอีกครั้ง ประหยัดเวลาได้มาก!
Patrick Oscity

24

กด%เมื่อเคอร์เซอร์อยู่บนเครื่องหมายคำพูดวงเล็บวงเล็บหรือรั้งเพื่อค้นหาการจับคู่


20
หากเคอร์เซอร์ไม่อยู่เหนือเคอร์เซอร์ใด ๆ มันจะเลื่อนไปทางขวาจนกว่าจะถึงหนึ่งในนั้น
Cyber ​​Oliveira

@ Léo: ขอบคุณสำหรับเคล็ดลับโบนัส!
Adam Liss

22

จนกระทั่ง [ตัวละคร] ( t) มันมีประโยชน์สำหรับคำสั่งใด ๆ ที่ยอมรับช่วง รายการโปรดของฉันคือct;หรือct)ลบทุกอย่างจนถึงเครื่องหมายอัฒภาคต่อท้าย / ปิดวงเล็บแล้ววางคุณไว้ในโหมดแทรก

นอกจากนี้Gและggมีประโยชน์ (ไปที่ด้านล่างและด้านบนตามลำดับ)


หนึ่งที่ดีที่สุดที่นี่ แต่คนอื่นบางคนก็มีประโยชน์เช่นกันฉันเพิ่งรู้เกี่ยวกับพวกเขาทั้งหมดแล้ว
Funkodebat

1
นอกจากนี้fแทนที่จะใช้tซึ่งจะ [กระทำ] ผ่านตัวละครนั้น เช่นมีเคอร์เซอร์ที่จุดเริ่มต้นของการโต้แย้งฟังก์ชั่นdf,จะลบมัน (ในภาษาที่เหมาะสมแน่นอน)
Actorclavilis

t และ f เหมาะสำหรับการแก้ไขส่วนของตัวแปร camelCase ตัวอย่างเช่นหากคุณเพิ่งทำซ้ำบรรทัดและต้องการเปลี่ยน firstVariable เป็น secondVariable ให้วางเคอร์เซอร์ของคุณที่ตำแหน่งเริ่มต้นของตัวแปรแรกแล้ว ctV
Greg

1
T และ F ยังทำงานได้ แต่ในทิศทางตรงกันข้าม
Fede

20

^r^w เพื่อวางคำภายใต้เคอร์เซอร์ในโหมดคำสั่ง

มันมีประโยชน์จริง ๆ เมื่อใช้คำสั่ง grep หรือแทนที่


หากเป็นคำเดียวที่คุณต้องการ * ในโหมดปกติจะค้นหาคำที่อยู่ใต้เคอร์เซอร์
idbrii

17

การพิมพ์หมายเลขบรรทัดตามด้วยggจะนำคุณไปยังบรรทัดนั้น


31
: ตามด้วยหมายเลขบรรทัดไม่เหมือนกัน: 42 ไปที่หมายเลขบรรทัด 42
Anti Veeranna

12
การพิมพ์หมายเลขบรรทัดตามด้วย G มีผลเหมือนกัน
Cyber ​​Oliveira

3
<number>goไปที่<number>อักขระ th ในไฟล์
คลอวิลิส

17

ฉันหวังว่าฉันจะรู้จักสิ่งโหมดบล็อกภาพพื้นฐานก่อนหน้านี้ แม้ว่าคุณจะไม่ได้ใช้ Vim เป็นอย่างอื่นก็สามารถประหยัดเวลาได้มากในการเปิดไฟล์ใน Vim สำหรับการบล็อกบางอย่าง ฉันค่อนข้างแน่ใจว่าฉันเสียเวลาทำสิ่งนี้ด้วยตนเอง

ตัวอย่างที่ฉันพบว่ามีประโยชน์อย่างยิ่งเมื่อพูดการสร้างรายชื่อค่าคงที่เชิงสัญลักษณ์อย่างสม่ำเสมอ:

เข้าสู่โหมด Visual Block ( Ctrl+ Qสำหรับฉันใน Windows แทนCtrl+ V)

เลื่อนเคอร์เซอร์เพื่อไฮไลต์บล็อกที่ต้องการ

จากนั้นI whatever textกดEscเพื่อแทรกข้อความที่ด้านหน้าบล็อกทุกบรรทัด

ใช้ AแทนIการแทรกข้อความหลังบล็อกในทุกบรรทัด

นอกจากนี้ - เพียงแค่สลับกรณีของการเลือกภาพด้วย ~สามารถประหยัดเวลาได้มาก

และเพียงแค่ลบคอลัมน์ด้วยdแน่นอน


15

^ yจะคัดลอกอักขระเหนือเคอร์เซอร์


6
... และ ^ E จะแทรกอักขระด้านล่างเคอร์เซอร์
มากเกินไป php

ใช้งานไม่ได้สำหรับฉันมันแค่เลื่อนเคอร์เซอร์ไปที่จุดเริ่มต้นของข้อความ
Alex

14

q <letter> - บันทึกแมโคร

และ

@ <same-letter> - เล่นกลับ

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


การใช้งานqง่ายขึ้น แต่คุณไม่จำเป็นต้องใช้มัน: เพียงบันทึกลงในบัฟเฟอร์ชื่อคำสั่งบัฟเฟอร์"- ตัวอย่างเช่นการใช้บัฟเฟอร์a- "ad$...
Mei

@Mei qบันทึกแมโคร แมโครสามารถมีคำสั่งไม่ได้เป็นเพียงข้อความเพื่อให้แตกต่างจาก"ad$ qa
Brian McCutchon

@Sortofabeginner นั่นไม่เกี่ยวข้องกับที่นี่ คำสั่ง "ad $ ใส่ข้อความลงในบัฟเฟอร์ a และ qa รันมัน
พ.ค.

2
@Mei qaไม่ทำงาน qaบันทึกและ@aเรียกใช้ มันเป็นความจริงที่คุณสามารถเขียนแมโครเป็นข้อความธรรมดาจัดเก็บไว้ในรีจิสเตอร์aด้วยบางอย่างเช่น"ad$จากนั้นเรียกใช้งานด้วย@aแต่นี่เป็นการทำงานที่ค่อนข้างมาก มีความแตกต่างพื้นฐานระหว่างการตัดและวางและบันทึกและเรียกใช้
Brian McCutchon

Doh! ฉันรู้ว่า. ขอบคุณสำหรับการแก้ไข
พ.ค.

13

การเปิดหลายไฟล์โดยใช้แท็บ

:tabe filepath

การนำทางระหว่างไฟล์ที่เปิดอยู่

gt and gT or :tabn and :tabp

บันทึกเซสชันที่เปิดอยู่เพื่อให้คุณสามารถกลับไปที่รายการไฟล์ที่เปิดในภายหลัง

:mksession session_file_name.vim

เปิดเซสชันที่สร้างขึ้น

vim -S session_file_name.vim

ปิดไฟล์ทั้งหมดพร้อมกัน

:qa

คำสั่งอื่นที่ฉันได้เรียนรู้เมื่อเร็ว ๆ นี้

autocmd

มันช่วยให้คุณสามารถเรียกใช้คำสั่งในเหตุการณ์ดังนั้นคุณสามารถทำได้เช่นเรียกใช้คำสั่งทำเมื่อคุณบันทึกไฟล์โดยใช้สิ่งที่ชอบ:

:autocmd BufWritePost *.cpp :make

12

qxจะเริ่มบันทึกการกดแป้น คุณสามารถทำงานแก้ไขใด ๆ ได้เป็นอย่างดีและ Vim จะจดจำงานดังกล่าว กดqอีกครั้งเมื่อเสร็จแล้วกด@xเพื่อเล่นซ้ำการกดแป้นของคุณ นี่เป็นสิ่งที่ยอดเยี่ยมสำหรับการแก้ไขซ้ำ ๆ ซึ่งซับซ้อนเกินกว่าจะเขียนการแมป คุณสามารถมีการบันทึกจำนวนมากโดยใช้ตัวละครอื่น ๆ กว่าx


5
นอกจากนี้ยังมีการใช้อักขระเดียวกัน 'x' ร่วมกันระหว่างคำสั่งแมโคร 'q' และคลิปบอร์ดที่ตั้งชื่อ ("x ... ) คุณสามารถฝากตัวอย่างแมโครไว้รอบไฟล์ของคุณและคัดลอกไปยังคลิปบอร์ดที่มีชื่อ (เช่น" xyy " ) แล้วเล่นกลับ (@x)
Cyber ​​Oliveira

และถ้าคุณสร้างมาโครสุดยอดเลยคุณสามารถวางคลิปบอร์ดนั้นลงใน _vimrc ของคุณด้วย 'let @x = "" (วางแมโครไว้ใน "") และบันทึกไว้ตลอดไป!
Kearns

11

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

:tab help <help_topic>

สิ่งนี้จะเปิดความช่วยเหลือในแท็บใหม่และในฐานะคนที่ชอบแท็บ Vim สิ่งนี้มีประโยชน์อย่างน่าขัน


2
บัฟเฟอร์คือแท็บของกลุ่ม พวกเขาได้รับการสนับสนุนที่ดีขึ้นจากเวิร์กโฟลว์เป็นกลุ่ม ฉันสงสัยว่ามีการเพิ่มแท็บลงในกลุ่มเพราะหลายคนไม่เข้าใจบัฟเฟอร์
still_dreaming_1

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

9

CW

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

อักขระ f +

ค้นหาการเกิดขึ้นครั้งถัดไปของตัวละครในบรรทัดปัจจุบัน ดังนั้นคุณสามารถทำvftเพื่อเลือกข้อความทั้งหมดจนถึง "t" ถัดไปในบรรทัดปัจจุบัน มันเป็นคีย์การเคลื่อนไหวอีกอันหนึ่งดังนั้นมันจึงทำงานกับคำสั่งอื่น ๆ


9

:b [any portion of a buffer name]เพื่อสลับบัฟเฟอร์ ดังนั้นถ้าคุณมีสองบัฟเฟอร์ "somefile1.txt" และ "someotherfile2.txt" ":b 2.t<enter>"คุณสามารถสลับไปที่สองที่มีเพียงแค่ นอกจากนี้ยังรองรับการเติมข้อมูลด้วยแท็บแม้ว่าจะไม่จำเป็นก็ตาม

เมื่อพูดถึงแท็บที่สมบูรณ์การตั้งค่า:set wildmode=full wildmenuก็มีประโยชน์มากเช่นกัน มันเปิดใช้งานการทำให้แท็บเสร็จสมบูรณ์สำหรับโหมดคำสั่งรวมถึงเมนูสไตล์ ncurses ที่เป็นประโยชน์มากสำหรับการจับคู่ที่เป็นไปได้ทั้งหมดเมื่อใช้งาน


9

:% s / ค้นหา / แทนที่

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


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