Các lệnh Vim đơn giản mà bạn muốn bạn biết trước đó [đã đóng]


378

Tôi đang học các lệnh mới trong Vim mọi lúc, nhưng tôi chắc chắn mọi người sẽ học được điều gì đó mới một lần. Tôi mới biết về điều này:

zz, zt, zb - con trỏ vị trí ở giữa, trên cùng hoặc dưới cùng của màn hình

Một số lệnh hữu ích hoặc thanh lịch khác mà bạn muốn bạn đã học từ lâu là gì?


46
về mặt kỹ thuật, zz, zt, zb đang định vị màn hình bằng con trỏ ở giữa / trên / dưới. để định vị con trỏ ở giữa / trên / dưới, sử dụng M, H hoặc L. Cả hai bộ lệnh đều hữu ích!
Peter

1
Đọc bài này vài tháng hoặc một năm trước đã giúp tôi mỗi ngày. dap là một cái gì đó tôi sử dụng để di chuyển các đoạn nhiều lần một giờ, nhờ vào bài đăng này.
Funkodebat

33
Tôi chưa bao giờ chọn quá nhiều thủ thuật từ một trang được đánh dấu là không mang tính xây dựng :) Cảm ơn tất cả.
Tasos Bitsios

Câu trả lời:


315

Tôi thực sự muốn tôi biết rằng bạn có thể sử dụng CtrlCthay vì Esctắt chế độ chèn. Đó là một sự tăng năng suất thực sự đối với tôi.


93
Tôi đã ánh xạ lại Caps-Lock của mình thành một Esc. Điều đó dễ dàng hơn cả Esc và Ctrl-C bình thường
Kasper

114
Thánh lồn 15 năm vi và tôi chưa bao giờ biết điều này ...
Chris K

31
một cách phổ biến khác là sử dụng 'jj' cho ESC. Tôi thích cách tiếp cận này cho đến nay. :bản đồ! jj <ESC>
claytron

27
Bạn cũng có thể sử dụng CTRL- [(mà tôi thích vì cả hai ngón tay út ... chỉ cần xoay một chút hai tay).
Jason Xuống

42
sử dụng 'jk' như một biến thể trên @ claytron's. nếu bạn vô tình ở chế độ INSERT, jk sẽ đưa bạn đến nơi bạn ở, vì vậy bạn có thể đánh nó bất cứ khi nào (tín dụng: người khác ... không phải ý tưởng của tôi).
Kyle

197

Thủ thuật "wow" gần đây nhất mà tôi học được là một phương pháp thực hiện tìm kiếm và thay thế phức tạp. Rất thường xuyên trong quá khứ, tôi đã có một sự thay thế thực sự phức tạp để thay thế và nó không hoạt động. Có một cách tốt hơn:

: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

"Bí quyết" ở đây (vì muốn có một từ tốt hơn) là cách mà bạn có thể sử dụng tìm kiếm để tạo regrec (và 'incsearch' làm nổi bật nó khi bạn nhập các ký tự) và sau đó sử dụng một mẫu trống thay thế: trống mẫu mặc định cho mẫu tìm kiếm cuối cùng.

Thí dụ:

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

Tương đương với:

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

Xem:

:help 'incsearch'
:help :substitute

1
wow ... Tôi đã tìm kiếm một cái gì đó như thế này
figurassa

1
yeah, tôi ước rằng tôi biết abou này sớm hơn. Nhưng một lần nữa, đó là những gì tôi nói về mọi thứ tôi học được mới ở vim.
Robert Massaioli

26
Đối với bất kỳ ai thực sự yêu thích điều này, hãy thử nhấn <Ctrl-R>/để chèn truy vấn tìm kiếm cuối cùng. (Xem :help i_CTRL-R) Thực sự hữu ích cho tương tự như trên, nhưng bạn muốn nắm bắt một phần kết quả tìm kiếm. (như thế này %s:/\\([fF]rank\\) and mary/marie and \1/g:)
idbrii

4
:%s//...cũng hoạt động với *(từ tìm kiếm dưới con trỏ). Một plugin có tên visual-star-search mở rộng chức năng *để khớp toàn bộ văn bản của lựa chọn trực quan, giúp dễ dàng tìm kiếm & thay thế văn bản đã chọn, ví dụ v3e(chọn trực quan 3 từ) *(tìm kiếm) và :%s//replacement/g(thay thế tất cả các lần xuất hiện bằng " thay thế "). Tôi sử dụng điều này thường xuyên đến mức tôi có một ánh xạ cho lệnh thay thế toàn cầu : :nmap <Leader>s :%s///g<left><left>.
Patrick Oscarity

1
@idbrii vì mọi người đọc có thể là Vim noobs (tôi), %s:nên :%s, và đối với hệ thống của tôi, tôi cần \(\)thay vì\\(\\)
Charlie Gorichanaz

155

Tôi đã tạo tài liệu tham khảo này về lệnh được sử dụng nhiều nhất cho một người bạn của tôi:

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.

Bạn liệt kê "~ X" để đi đến nhãn hiệu có tên X. Điều đó không phù hợp với tôi - thay vào đó tôi sử dụng "'X" (trích dẫn đơn).

Ồ Bạn hoàn toàn đúng. Khi tôi gõ hướng dẫn, tôi đoán mắt tôi chỉ nhìn thấy dấu ngã và bóng trên tấm lưng. Tôi sẽ cập nhật cho phù hợp. Cảm ơn cho những người đứng đầu lên.
newman brian

5
danh sách này là tốt, nhưng tôi thực sự muốn biết làm thế nào bạn vẽ bảng này? với VIM? Plugin nào? Tôi đang tìm kiếm một cái hiện tại.
Kent

6
Tôi đã sử dụng VIM, nhưng không có plugin. Tuy nhiên; sử dụng tính năng chọn khối làm cho nó tương đối dễ dàng. Vui mừng bạn tìm thấy danh sách hữu ích! ~ brian
newman brian

11
Ctrl-Q để chọn khối là tính đặc hiệu của mswin.vim cho phép CTRL-V dán. Hầu hết người dùng vim sẽ xem xét điều xấu này và vô hiệu hóa mswin.vim. "+ P hoặc Ctrl-R + không khó gõ để chèn nội dung trong bảng tạm.
Benoit

144

gi chuyển sang chế độ chèn, đặt con trỏ ở cùng vị trí trước đó.


29
Tôi đã rất hạnh phúc khi phát hiện ra g;điều này khiến tôi rơi nước mắt :-)
Patrick Oscarity

@longdeqidao hoàn toàn không. Nó trở về điểm chèn cuối cùng. Vì vậy, bạn có thể cuộn vào nội dung trái tim của bạn và nó sẽ kéo bạn trở lại nơi bạn đã chèn lần cuối.
Cyber ​​Oliveira

9
FYI, g; (mà @PatrickOscity đã đề cập ở trên) đặt con trỏ tại nơi thực hiện chỉnh sửa. Bạn có thể sử dụng nó nhiều lần để quay lại lịch sử. Lưu ý điều này ở đây vì trợ giúp vim của tôi không đề cập đến điều này vì một số lý do kỳ lạ.
PonyEars

13
Trực giác của Vim không bao giờ hết ấn tượng với tôi. Vì @PonyEars đã đề cập g;tôi đã thử nếu "đối diện" của nó sẽ là g,và lo và kìa, chúng ta có thể quay lại và chuyển tiếp!
Cyber ​​Oliveira

angắn hơn :) Nhưng githực sự rất trực quan, gthường là một hoạt động ngược lại.
Erwin Rooijakkers

105
: q!

Tôi ước tôi biết rằng trước khi tôi bắt đầu vi lần đầu tiên.


23
Là một anh chàng emacs, đó là bình luận hài hước nhất mà tôi đã đọc. không chắc chắn bạn có nghĩa là nó mặc dù. Bạn làm tôi hạnh phúc ngày hôm nay.
pjammer

29
Tôi nhớ lần đầu tiên thử vim và emacs trong cùng một ngày, không biết làm thế nào để thoát. Tôi tự nghĩ rằng cái quái gì đã xảy ra với những người này!?
vật lý học

13
+1. Lần đầu tiên bạn bắt đầu vim, thông báo mặc định sẽ là "write: q to exit". Tôi sẽ tiết kiệm được rất nhiều thời gian lol
Jose Ramón

2
@ JoséRamón Nhưng nó sẽ hiển thị trên màn hình theo mặc định nếu bạn nhập vim mà không mở tệp. Điều này đã được thêm vào gần đây? Tôi có thể nhớ rõ việc thử vim nhiều năm trước và nó đã ở đó rồi. Nó cũng cho bạn biết để sử dụng :q!nếu bạn cố gắng thoát mà không lưu bộ đệm.
điện tử

5
@ivy_lynx có, bạn có thể đúng, nhưng chỉ khi bạn mở vim mà không có tệp. Thông thường, lần đầu tiên bạn mở vim là vì bạn cần chỉnh sửa tệp cấu hình trong Unix, vì vậy bạn viết "tệp $ vim" và bạn không thể tìm thấy lối thoát của mình. Hay tôi là người duy nhất?
Jose Ramón

56

^ XF hoàn thành sử dụng tên tệp từ thư mục hiện tại. Không còn sao chép / dán từ thiết bị đầu cuối hoặc kiểm tra hai lần đau đớn.

^ XP hoàn thành việc sử dụng các từ trong tệp hiện tại

: thiết lập cuộn cuộn buộc một bộ đệm để cuộn dọc theo bộ đệm khác. ví dụ: chia cửa sổ của bạn thành hai tấm dọc. Tải một tệp trong mỗi tệp (có lẽ các phiên bản khác nhau của cùng một tệp). Làm :set scrollbindtrong mỗi. Bây giờ khi bạn cuộn trong một, cả hai tấm sẽ cuộn cùng nhau. Lý tưởng để so sánh các tập tin.


Làm cách nào để vô hiệu hóa thanh cuộn khi tôi đã bật nó?
Amjith

2
jinxed_coder : :set noscbđể tắt và sử dụng :set scbđể bật (không :scrollbind). :h scrollbind
jmdeldin

Rất tiếc. Đã sửa cho ': đặt cuộn giấy'.
Brian Agnew

7
^ XP hoàn thành với ưu tiên cho các từ trước đó trong tệp, ^ XN với ưu tiên cho các từ tiếp theo trong tệp.
u0b34a0f6ae

Bạn cũng có thể tìm các tệp khác bằng cách mở tệp1 và chạy :diffsplit file2hoặc chỉ bắt đầu vim với vim -d file1 file2. Vim tự động cuộn hai tập tin.
Brian McCutchon

51

Bạn có thể sử dụng toàn bộ nhóm lệnh để thay đổi văn bản bên trong ngoặc / dấu ngoặc đơn / dấu ngoặc kép / thẻ. Nó rất hữu ích để tránh phải tìm sự bắt đầu và kết thúc của nhóm. Hãy thử ci(, ci{, ci<, ci", ci', cttùy thuộc vào loại đối tượng bạn muốn thay đổi. Và các ca(, ca{, ...biến thể cũng xóa dấu ngoặc / dấu ngoặc kép.

Dễ nhớ: thay đổi bên trong câu lệnh ngoặc / thay đổi câu lệnh ngoặc.


16
Điều này không chỉ dành cho c. Bạn có thể làm điều này với dđể xóa (ví dụ di (hoặc da (), yđể yank, vđể chọn, v.v.
Nathan Fellman

Xin chào! Tôi muốn biết có tài liệu cho việc này đang sử dụng :help? Tôi không thể tìm thấy nó ở bất cứ đâu. > _ <
Matej

1
@Peter Tôi đã kiểm tra những cái đó trước đây, nhưng không thể thấy đề cập đến hành vi "bên trong + dấu phân cách" đặc biệt. Thì ra là ở :help motion.txt! Cảm ơn!
Matej

2
Mẹo này là lý do duy nhất khiến tôi chuyển sang vi ngay từ đầu :)
Justin L.

1
Nếu bạn đang chỉnh sửa HTML hoặc XML, bạn có thể sử dụng citđể thay đổi nội dung của thẻ hiện tại. Ví dụ: <span>Some text</span>nếu con trỏ của bạn vượt quá "m" bạn có thể làm ditđể lấy <span></span>.
Jonathan Potter

47
  1. Đừng nhấn Escbao giờ. Xem câu trả lời này để tìm hiểu lý do tại sao . Như đã đề cập ở trên, Ctrl+ Clà một thay thế tốt hơn. Tôi đề nghị lập bản đồ Caps Lockchìa khóa của bạn để thoát.

  2. Nếu bạn đang chỉnh sửa ngôn ngữ tương thích Ctags , sử dụng tệp thẻ và :ta, Ctrl+ ], v.v. là một cách tuyệt vời để điều hướng mã, thậm chí trên nhiều tệp. Ngoài ra, Ctrl+ NCtrl+ Phoàn thành bằng cách sử dụng tập tin thẻ là một cách tuyệt vời để giảm bớt thao tác bàn phím.

  3. Nếu bạn đang chỉnh sửa một dòng được gói bởi vì nó rộng hơn bộ đệm của bạn, bạn có thể di chuyển lên / xuống bằng gk và gj.

  4. Cố gắng tập trung vào việc sử dụng hiệu quả các lệnh chuyển động trước khi bạn học thói quen xấu. Những việc như sử dụng 'dt' hoặc 'd3w' thay vì nhấn xa nhiều lần. Về cơ bản, bất cứ khi nào bạn thấy mình nhấn cùng một phím nhiều lần, có thể có cách tốt hơn / nhanh hơn / ngắn gọn hơn để hoàn thành cùng một điều.


11
Đừng dùng Escape? Đó là dị giáo. Escape là người bạn tốt nhất của bạn, cả trong và ngoài công việc.
xcramp

28
Nếu đó là một người bạn tốt, tại sao nó lại ở quá xa trên bàn phím?
anthony

bởi vì 99% người dân không bao giờ sử dụng nó
Stefano Borini

5
Escape được tách ra khỏi các phím khác bằng một vài inch trên bàn phím của tôi. Bạn không thể bỏ lỡ nó.
Brian Carper

15
# 3 thật tuyệt vời! Vẫn đang học những điều mới ...
newman brian

45

Phím hoa thị *, sẽ tìm kiếm từ dưới con trỏ.

[+ Tabsẽ đưa bạn đến định nghĩa của hàm C nằm dưới con trỏ của bạn. (Tuy nhiên, nó không luôn hoạt động.)


1
Hãy thử 'man ctags' nếu bạn đang sử dụng * nix để tìm hiểu cách tạo tệp "thẻ" cho vim biết cách tìm định nghĩa của bất kỳ hàm hoặc biến nào trong nhiều ngôn ngữ ngoài C. Sử dụng ctrl +] để tìm định nghĩa của mã thông báo dưới con trỏ của bạn hoặc sử dụng: tag tokenToFind để tìm bất kỳ mã thông báo nào mà nó biết. Bạn thậm chí có thể bắt đầu vim với "vim -t tokenToFind" để mở tệp thích hợp và định vị con trỏ tại chức năng bạn cần chỉnh sửa.
Adam Liss

23
phím # sẽ tìm kiếm theo hướng ngược lại cho từ dưới con trỏ
Funkodebat

github.com/bronson/vim-visual-star-search cho phép tìm kiếm ngôi sao cho các lựa chọn trực quan. Tôi không muốn bỏ lỡ nó nữa.
Patrick Oscarity

[ + Tab sẽ luôn hoạt động khi bạn mở rộng pathvới các thư mục cần thiết nhưset path+=path/to/files
dlmeetei

43

ZZ(hoạt động như thế nào :wq)

Và về vị trí con trỏ: Tôi thấy rằng một con trỏ luôn ở giữa màn hình thật tuyệt -

set scrolloff=9999

2
Không biết điều đó. :xcũng vậy
sa125

18
Không hoàn toàn chính xác. Hoạt động như :x, chỉ lưu tệp nếu có thay đổi, trong khi :wqluôn lưu tệp.
Erik B

ZQ (hoạt động như: q!)
xialu

42

Một số bổ sung mới nhất của tôi vào kho não Vim của tôi:

  • ^wi: Chuyển đến thẻ dưới con trỏ bằng cách chia cửa sổ.
  • cib/ciB: Thay đổi văn bản bên trong bộ dấu ngoặc đơn () hoặc dấu ngoặc {} tương ứng.
  • :set listchars=tab:>-,trail:_ list: Hiển thị các tab / dấu cách khác nhau trực quan so với các không gian khác. Nó giúp rất nhiều với mã hóa Python.

4
Điều này cần nhiều phiếu hơn! cibtuyệt.
Matt Parker

Ngoài ra: ciw để thay đổi từ hiện tại (hoặc caw, giống nhau nhưng chỉ bằng tay trái) ciW để thay đổi W = o. (rd) Sames hiện tại bằng v thay vì c sẽ chọn trong hình ảnh thay vì thay thế
lajarre

5
cib tương đương với việc gõ "ci (". Bạn cũng có thể thực hiện "ci [", "ci {" hoặc (nếu vimrc của bạn được thiết lập chính xác) "ci <", cho các loại dấu ngoặc khác.
Tom Lord

2
Ngoài ra, "cit" để thay đổi văn bản trong thẻ. Rất hữu ích khi làm việc với XML / HTML.
Walter

thay vào đó, điều đáng nói là bạn có thể có hậu tố thay thế, nếu bạn thích điều đó hơn. Ngoài ra, tôi vừa tìm hiểu về ci}& cit- wow, điều này sẽ rất hữu ích. vi[m]đang chứng minh một chương trình rất thú vị!
gạch dưới

37

gv bắt đầu chế độ trực quan và tự động chọn những gì bạn đã chọn trước đó.


34

: shell để khởi chạy giao diện điều khiển shell từ Vim. Hữu ích khi bạn muốn kiểm tra tập lệnh mà không cần thoát Vim. Chỉ cần nhấn ^ d khi bạn thực hiện với bảng điều khiển shell và sau đó bạn quay lại Vim và tệp đã chỉnh sửa của mình.


Tôi đoán :!shlà quá khó. Tôi thích điều đó bởi vì việc soạn thảo các dòng lệnh dễ dàng hơn bằng cách sử dụng các thanh ghi / hoàn thành từ bộ đệm hiện tại hoặc ví dụ: sử dụng %/ %:hcho tên tệp / dirname hiện tại, v.v.
sehe 7/215

1
Cái này rất tuyệt Tôi sử dụng nó mỗi ngày .. Trước đó ,: wq, làm công cụ cli, mở lại vim với cùng một tệp .. Tối ưu hóa tuyệt vời
Flashin 8/12/2015

7
Ctrl-Z để chuyển sang shell và fg <ENTER> để quay lại vim.
Mario G.

Đặt map <Esc>! :shell<CR>trong của bạn .vimrcvà bạn có thể khởi chạy shell chỉ với Alt +!, Hoặc Alt + Shift + 1. (Mnemonic: :!{cmd}thực thi {cmd}bằng vỏ.)
musiphil

:shellsẽ bắt đầu một cấp độ vỏ mới lồng nhau mặc dù. Trong khi đó ctrl-zthì không.
wvducky


31

mã hóa

tên tệp vim -x

Bạn sẽ được yêu cầu nhập cụm mật khẩu, chỉnh sửa và lưu. Bây giờ bất cứ khi nào bạn mở tệp trong vi một lần nữa, bạn sẽ phải nhập mật khẩu để xem.


Đồng bộ hóa điều này với dropbox của bạn và bạn có được một trình quản lý mật khẩu thực sự tuyệt vời ;-)
Luis Nell

15
Nhưng lưu ý rằng trừ khi bạn set cryptmethod=blowfish(chỉ khả dụng trong 7.3+), nó sẽ sử dụng thuật toán có độ mạnh đáng cười. Xem help encryptionđể biết thêm chi tiết.
AB

3
Vui lòng không sử dụng mã hóa vim, mã hóa không tốt và bảo mật kém là không tốt nhất. Thông tin thêm: github.com/neovim/neovim/issues/694
Rodrigoq

2
dgl.cx/2014/10/vim-blowfish meta-tldr: "đã sửa trong Vim 7.4.399 [ Groups.google.com/forum/#!msg/vim_dev/D8FyRd0EwlE/bkBOo-hzTzoJ] , vì lý do tương thích ngược để trở thành một loại tiền điện tử mới, vì vậy hãy sử dụng :set cm=blowfish2"
underscore_d

28

Xây dựng và gỡ lỗi mã của bạn từ bên trong Vim!

Cấu hình

Không nhiều lắm, thật đấy. Bạn cần một Makefiletrong thư mục hiện tại.

Để biên dịch

Trong khi bạn đang ở trong Vim, hãy gõ :makeđể gọi shell và xây dựng chương trình của bạn. Đừng lo lắng khi đầu ra cuộn qua; chỉ cần nhấn Enterkhi hoàn thành để trở về Vim.

Phép thuật

Quay lại trong Vim, bạn có các lệnh sau theo ý của bạn:

  1. :cl liệt kê các lỗi, cảnh báo và các thông báo khác.
  2. :cchiển thị thông báo lỗi / cảnh báo hiện tại ở cuối màn hình và nhảy đến dòng vi phạm trong mã của bạn.
  3. :cc nnhảy đến tin nhắn nthứ .
  4. :cn tiến tới tin nhắn tiếp theo.
  5. :cp nhảy đến tin nhắn trước

Có nhiều; nếu bạn quan tâm, hãy nhập :help :cctừ bên trong Vim.


1
làm việc với nhiều hơn là chỉ biên dịch mã. Cụ thể, bất kỳ tác vụ nào được viết trong tệp tạo tệp là một cách sử dụng tuyệt vời cho việc này.
Dwight Spencer

25

^ P và ^ N

Hoàn thành văn bản trước (^ P) hoặc tiếp theo (^ N).

^ O và ^ tôi

Chuyển đến vị trí trước (^ O - "O" cho cũ) hoặc đến vị trí tiếp theo (^ I - "I" ngay gần "O").

Khi bạn thực hiện tìm kiếm, chỉnh sửa tệp, v.v., bạn có thể điều hướng qua các "bước nhảy" này về phía trước và quay lại.

Điểm

Nhấn ma (m- mark, a - tên của mark). Sau đó để trở về vị trí, gõ `a .


1
Ồ, tôi không biết về ^ O và ^ Tôi: điều đó thật tuyệt vời. Có thể có giá trị bao gồm :help jump-motionsvv trong câu trả lời của bạn trong trường hợp bất cứ ai muốn biết thêm thông tin.
DrAl

hãy xem ShowMarks vim.org/scripts/script.php?script_id=152 . Nó sẽ giúp bạn nhớ vị trí và tất cả các điểm của bạn trong bộ đệm. bạn có thể bật và tắt trực quan hóa bằng \ mt
người kiểm tra

Tôi không nhận được sự khác biệt giữa ^ P và ^ N ...
lajarre

@lajarre họ quay vòng qua danh sách các lần hoàn thành có sẵn theo hướng ngược lại
Patrick Oscarity

2
Tôi thường sử dụng ^ O ^ O khi mở Vim sau khi tôi nhận thấy rằng tôi muốn chỉnh sửa lại tệp đã chỉnh sửa lần cuối. Tiết kiệm thời gian rất lớn!
Patrick Oscarity

24

Nhấn %khi con trỏ ở trên dấu ngoặc kép, dấu ngoặc đơn, dấu ngoặc hoặc dấu ngoặc để tìm kết quả khớp.


20
Nếu con trỏ không vượt qua bất kỳ con nào, nó sẽ dịch chuyển sang phải cho đến khi nó chạm vào một trong số chúng.
Cyber ​​Oliveira

@ Léo: Cảm ơn vì tiền thưởng!
Adam Liss

22

Cho đến khi [nhân vật] ( t). Nó rất hữu ích cho bất kỳ lệnh nào chấp nhận một phạm vi. Yêu thích của tôi là ct;hoặc ct)xóa mọi thứ theo dấu chấm phẩy / dấu ngoặc đóng và sau đó đặt bạn vào chế độ chèn.

Ngoài ra, Gggrất hữu ích (Đi đến dưới cùng và trên cùng tương ứng).


tốt nhất ở đây, mặc dù một số khác cũng hữu ích, tôi chỉ biết về chúng thôi
Funkodebat

1
Ngoài ra, fthay vì t, sẽ [hành động] lên thông qua nhân vật đó; ví dụ, có con trỏ ở đầu đối số hàm, df,sẽ xóa nó (dĩ nhiên là bằng ngôn ngữ phù hợp).
Actorclavilis

t và f là tuyệt vời để chỉnh sửa một phần của biến camelCase. Ví dụ, nếu bạn chỉ cần sao chép một đường và cần phải thay đổi firstVariable để secondVariable, vị trí con trỏ của bạn vào đầu firstVariable, sau đó CTV
Greg

1
T và F cũng hoạt động, nhưng theo hướng ngược lại.
Fede

20

^r^w để dán từ dưới con trỏ trong chế độ lệnh.

Nó thực sự hữu ích khi sử dụng lệnh grep hoặc thay thế.


Nếu đó là từ duy nhất bạn muốn, thì * ở chế độ bình thường sẽ tìm kiếm từ dưới con trỏ.
idbrii

17

Nhập một số dòng theo sau ggsẽ đưa bạn đến dòng đó.


31
: theo sau là số dòng thực hiện tương tự: 42 chuyển đến dòng số 42
Anti Veeranna

12
Gõ một số dòng theo sau G có tác dụng tương tự.
Cyber ​​Oliveira

3
<number>gođi đến <number>nhân vật thứ trong tập tin
Actorclavilis

17

Tôi muốn tôi biết những thứ chế độ khối hình ảnh cơ bản sớm hơn. Ngay cả khi bạn không sử dụng Vim cho bất kỳ điều gì khác, việc mở một tệp trong Vim chỉ dành cho một số thao tác khối có thể là một cách tiết kiệm thời gian lớn. Tôi khá chắc chắn rằng tôi đã lãng phí rất nhiều thời gian để làm điều này bằng tay.

Các ví dụ tôi thấy đặc biệt hữu ích, khi, nói, tái cấu trúc danh sách các tên hằng biểu tượng một cách nhất quán:

Vào chế độ Visual Block ( Ctrl+ Qcho tôi trên Windows thay vì Ctrl+ V)

Di chuyển con trỏ để tô sáng khối mong muốn.

Sau đó, I whatever textvà nhấn Escđể có văn bản được chèn trước khối trên mỗi dòng.

Sử dụng Athay vì Iđể văn bản được chèn sau khối trên mỗi dòng.

Ngoài ra - chỉ đơn giản là chuyển đổi trường hợp của một lựa chọn trực quan với ~có thể là một trình tiết kiệm thời gian lớn.

Và đơn giản là xóa các cột, quá, với dtất nhiên.


15

^ y sẽ sao chép ký tự phía trên con trỏ.


6
... và ^ E sẽ chèn ký tự bên dưới con trỏ
quá nhiều php

không hoạt động với tôi, nó chỉ di chuyển một con trỏ đến đầu văn bản
Alex

14

q <letter> - ghi lại một macro.

@ <cùng chữ> - phát lại.

Đây là những lệnh hữu ích nhất trong Vim vì bạn có thể khiến máy tính làm rất nhiều việc cho bạn và thậm chí bạn không phải viết chương trình hay bất cứ thứ gì.


Việc sử dụng qđơn giản hóa các vấn đề, nhưng bạn không bắt buộc phải sử dụng nó: chỉ cần lưu vào bộ đệm có tên lệnh bộ đệm "- ví dụ: sử dụng bộ đệm a- "ad$...
Mei

@Mei qghi lại một macro; macro có thể chứa các lệnh, không chỉ văn bản, vì vậy "ad$khác với qa.
Brian McCutchon

@Sortofabeginner Điều đó không liên quan ở đây. Lệnh "ad $ đặt văn bản vào bộ đệm a và qa chạy nó.
Mei

2
@Mei qakhông chạy nó; qaghi lại và @achạy nó. Đúng là bạn có thể viết một macro trong văn bản đơn giản, lưu trữ nó trong đăng ký avới một cái gì đó như "ad$, và sau đó thực hiện nó @a, nhưng điều này là công việc hơn một chút. Có một sự khác biệt cơ bản giữa cắt và dán và ghi và chạy.
Brian McCutchon

Đừng! Tôi biết rằng. Cảm ơn đã sửa chữa
Mei

13

Mở nhiều tệp bằng các tab

:tabe filepath

Điều hướng giữa các tệp đang mở

gt and gT or :tabn and :tabp

Lưu phiên mở để bạn có thể quay lại danh sách các tệp đang mở sau đó

:mksession session_file_name.vim

Mở một phiên đã tạo

vim -S session_file_name.vim

Đóng tất cả các tệp cùng một lúc

:qa

Một lệnh khác tôi đã học gần đây

autocmd

Nó cho phép bạn chạy một lệnh trên một sự kiện, vì vậy, ví dụ bạn có thể chạy lệnh make khi bạn lưu tệp bằng cách sử dụng một cái gì đó như:

:autocmd BufWritePost *.cpp :make

12

qx sẽ bắt đầu ghi lại các lần nhấn phím. Bạn có thể thực hiện khá nhiều nhiệm vụ chỉnh sửa và Vim nhớ nó. Nhấn q lần nữa khi bạn kết thúc và nhấn @x để phát lại tổ hợp phím của bạn. Điều này rất tốt cho các chỉnh sửa lặp đi lặp lại quá phức tạp để viết ánh xạ cho. Bạn có thể có nhiều bản ghi bằng cách sử dụng một ký tự khác x .


5
Ngoài ra, cùng một ký tự 'x' được chia sẻ giữa lệnh macro bản ghi 'q' và các bảng ghi có tên ("x ...). Bạn có thể để các đoạn macro nằm xung quanh tệp của mình và sao chép chúng vào bảng tạm có tên (ví dụ:" xyy ) và sau đó phát lại chúng (@x).
Cyber ​​Oliveira

Và nếu bạn tạo macro awesomist bao giờ, bạn có thể dán bảng tạm đó vào _vimrc của bạn bằng 'let @x = ""' (đặt macro vào "") và lưu nó mãi mãi!
Kearns

11

Tôi phải nói rằng một trong những mục yêu thích của tôi là đưa cửa sổ trợ giúp vào một tab mới:

:tab help <help_topic>

Điều này mở ra sự trợ giúp trong một tab mới và, như ai đó yêu thích các tab Vim, điều này rất hữu ích.


2
Bộ đệm là các tab của vim. Họ được hỗ trợ tốt hơn bởi quy trình làm việc vim. Tôi nghi ngờ các tab chỉ được thêm vào vim vì quá nhiều người không hiểu bộ đệm.
still_dreaming_1

Ok rất sớm sau khi nói điều đó, tôi đã tìm thấy một cách sử dụng cho các tab trong vim. Đúng là nếu bạn đang sử dụng một bộ đệm cho mỗi tab, bạn cần tìm hiểu về bộ đệm. Đó không phải là cách các tab được dự định sẽ được sử dụng trong vim. Hầu hết người dùng vim nâng cao sử dụng bộ đệm theo cách các tab được sử dụng trong hầu hết các chương trình. Nhiều người nghĩ rằng các tab nên được đặt tên bố trí trong vim. Chúng chủ yếu để có các bộ sưu tập khác nhau của các cửa sổ mở trong các tab khác nhau. Bạn cũng có thể có một bộ đệm cụ thể mà bạn quay lại mở rất nhiều trong một tab và sử dụng tab khác để xem tất cả các bộ đệm khác.
still_dreaming_1

9

cw

Thay đổi từ - xóa từ dưới con trỏ và đưa bạn vào chế độ chèn để nhập từ mới. Tất nhiên điều này hoạt động với các phím di chuyển khác, vì vậy bạn có thể làm những việc như c $ để thay đổi đến cuối dòng.

nhân vật f +

Tìm sự xuất hiện tiếp theo của nhân vật trên dòng hiện tại. Vì vậy, bạn có thể làm vft để chọn tất cả văn bản cho đến "t" tiếp theo trên dòng hiện tại. Đây là một phím di chuyển khác, vì vậy nó cũng hoạt động với các lệnh khác.


9

:b [any portion of a buffer name]để chuyển đổi bộ đệm. Vì vậy, nếu bạn có hai bộ đệm, "somefile1.txt" và "someotherfile2.txt", bạn có thể chuyển sang thứ hai một cách đơn giản ":b 2.t<enter>". Nó cũng hỗ trợ hoàn thành tab, mặc dù không bắt buộc.

Nói về việc hoàn thành tab, cài đặt :set wildmode=full wildmenucũng rất hữu ích. Nó cho phép hoàn thành tab hoàn chỉnh cho chế độ lệnh, cũng như một menu kiểu ncurses rất hữu ích của tất cả các kết quả khớp có thể có khi sử dụng nó.


9

:% s, / tìm kiếm, / thay thế,

Bạn có thể sử dụng các ký tự khác ngoài /(dấu gạch chéo) để tách các mẫu để thay thế. Bằng cách này, bạn không phải thoát khỏi dấu gạch chéo của đường dẫn tệp.


2
Oh có. Tôi biết sedđã có điều này, nhưng không vim. Bạn càng biết nhiều hơn ♒ ☆
beerbajay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.