Điều hướng siêu nhanh VIM


91

Điều duy nhất tôi nhớ khi sử dụng các trình soạn thảo khác là tìm vị trí của tôi bằng chuột. Tôi có thể nhìn bằng mắt mình vào một khu vực cụ thể trên tệp và với một chuyển động của con chuột và một cú nhấp chuột, tôi đã ở đó. Với VIM tôi phải jjjjjkkkkkkjjjjhhhh ... suýt nữa thì hhhhh oh tào lao tôi đã bỏ lỡ 3 ký tự rồi, lll.

Tôi đang học cách đánh dấu và tôi đã tìm thấy một plugin đánh dấu rất tuyệt vời, tôi có thể tạo các điểm đánh dấu và hủy chúng <f3>và điều hướng đến chúng nếu không may là các dấu này bị quên khi đóng tệp.

Làm thế nào để tất cả các tệp siêu điều hướng? Tôi biết tôi cũng có thể làm 5j7k4j5h, v.v. nhưng phải có một plugin có thể đọc mắt tôi và đặt con trỏ vào nơi tôi thực sự cần ..

Tôi cũng đã học cách sử dụng /% để tìm kiếm một thuật ngữ cụ thể. Nó thực sự hữu ích nhưng tất cả các ký tự phù hợp đều được đánh dấu thông qua tài liệu.


Tất cả các câu trả lời tuyệt vời, trong khi chúng ta vẫn đang nói về chủ đề, tôi nghĩ rằng tôi có thể thử nghiệm với một cái gì đó như nG (chuyển đến dòng Số) f% (tìm ký tự đầu tiên của những gì tôi đang tìm kiếm hoặc như một số người đề xuất sử dụng w để tiếp tục đến từ tiếp theo.
Helmut Granda

Câu trả lời:


172

Hãy thử $ vimtutor, nó sẽ dạy bạn mọi thứ bạn cần biết để bắt đầu.

hjkl là đỉnh của tảng băng trôi và rất hiếm khi được sử dụng, ít nhất là trong trường hợp của tôi.

wWEeBbgegEtất cả đều cho phép chuyển từng chữ:

  • wetiếp tục, Wđồng thời Etính đến khoảng trắng và dấu chấm câu

    " here the * marks the default location of the cursor
    " and each letter shows where you jump when you hit the key.
    
    Latin: Lorem ipsum dolor sit amet.
                       *   e   e    e
                       *   E   E     E
    *    w w     w     w     w   w   w
    *      W     W     W     W   W   W
    
  • bgelùi lại, Bđồng thời gEtính đến khoảng trắng và dấu chấm câu

    Latin: Lorem ipsum dolor sit amet.
    b    b b     b     *
    B      B     B     *
         ge    ge    ge*
        ge
         gE    gE    gE*
    

fFtTđược sử dụng để tiếp cận một ký tự cụ thể trên dòng hiện tại;,được sử dụng để lặp lại chuyển động đó, theo cùng hướng ;và theo hướng ngược lại đối với ,:

  • fmnhảy BẬT mvề phía trước tiếp theo , Flùi về phía sau

    Latin: Lorem ipsum dolor sit amet.
    *          fm    ;            ;
               ;     Fm          *
    
  • tmnhảy TRƯỚC hành trình tiếp theo m, Tlùi về phía sau

    Latin: Lorem ipsum dolor sit amet.
    *         tm    ;            ;
              ;     Tm           *
    

/? được sử dụng để chuyển đến lần xuất hiện đầu tiên của một mẫu từ vị trí con trỏ hiện tại:

  • /pattern tiến lên

    Latin: Lorem ipsum dolor sit amet.
    *            /ips
    
  • ?pattern đi lùi

    Latin: Lorem ipsum dolor sit amet.
    ?Lat             *
    

0$ được sử dụng để nhảy đến ký tự đầu tiên và cuối cùng của dòng.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
    0                  *                                     $

^g_ được sử dụng để chuyển đến ký tự có thể in đầu tiên và cuối cùng của dòng.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
                ^      *                         g_

Đơn và kết hợp ()[]{}được sử dụng để di chuyển cụm từ theo cụm từ hoặc đoạn theo đoạn hoặc khối mã theo khối mã.

<C-b><C-f>được sử dụng để cuộn màn hình tới và lui.

<C-u><C-d>được sử dụng để cuộn theo nửa màn hình lùi và tiến.

H, MLdi chuyển con trỏ lên trên cùng, giữa, dưới cùng của khung nhìn.

zt, zzzbdi chuyển dòng dưới con trỏ lên trên cùng, giữa, dưới cùng của khung nhìn, tương ứng.

Và như thế.

:help motion.txt sẽ thổi bay tâm trí của bạn.


17
Tôi không thường làm điều này, nhưng nhận xét này chỉ để nói với bạn rằng đây là một câu trả lời tuyệt vời!
jojo

Vì lý do nào đó, tôi chưa bao giờ sử dụng H, M hoặc L trước đây, những mẹo hay!
Chris

Thêm vào đó ]}[{(2 tổ hợp phím) nhảy đến cùng hay bắt đầu của một phạm vi (ví dụ như một định nghĩa bởi{ ... }
Matthew Woo

3
Chà, điều này vẫn chưa thực sự trả lời câu hỏi của OP how to jump to a line he's seeing like using a mouse. Tôi biết và sử dụng tất cả các ràng buộc chính mà bạn đã đề cập mọi lúc. Nhưng nó vẫn không hiệu quả bằng trỏ chuột khi nhảy khoảng cách lớn.
Penghe Geng

vâng H, M, L rất dễ nhớ: Cao, Trung bình, Thấp;)
@Chris

25

Ngoài lệnh chuyển động của vim, tôi thấy một plugin vim tên là EasyMotion khá hữu ích để điều hướng, nếu bạn đã quen với vimperator hoặc pentadactyl, EasyMotion chỉ cần đưa chế độ gợi ý trở lại vim. đây là một bản demo hoạt hình và đây là video hướng dẫn. Hy vọng nó hữu ích cho bạn.


Ưu điểm của easymotion là bạn có thể đi đến bất kỳ đâu trên màn hình chỉ với 3 lần nhấn phím.
Xavier T.

+1: EasyMotion thực sự là một gói phản lực chuyển động của Vim. (. bằng cách này, PreciseJump quá thực tế, EasyMotion là một đứa con trai của PreciseJump)
Dmitry Frank

2
Làm thế quái nào mà tác giả của EasyMotion lại có được dòng trạng thái siêu tuyệt vời này trong bản demo?
Cyrille

1
'Dòng trạng thái siêu tuyệt vời' là một plugin có tên 'Powerline'. Tại đây: vim.org/scripts/script.php?script_id=3881
DEzra

bạn có thể vui lòng cập nhật url demo động được không? nó không hoạt động nữa
brauliobo

20

Có hàng triệu cách để di chuyển trong vim, đây là một trong những lĩnh vực thực sự mạnh mẽ của nó. Tôi sử dụng {}rất nhiều, di chuyển lên và xuống dòng trống tiếp theo theo hướng đó. %rất hữu ích cho việc di chuyển qua lại đến một dấu ngoặc vuông phù hợp (thuộc bất kỳ loại nào). WBdi chuyển tới và lui bằng một "từ".

Có thể đáng giá khi xem lại phần Di chuyển xung quanh của hướng dẫn Vim.


4
Có lẽ cũng đáng nói là phân trang lên và xuống bằng cách sử dụng Ctl + U và Ctl + D, tương ứng.
Nick

10

vim có hỗ trợ chuột! hãy thử cái này (trong .vimrc của bạn):

set mouse=a

ghi chú bên lề : với tư cách là người dùng màn hình, tôi thấy rằng tôi cũng cần

set ttymouse=xterm2

để điều này hoạt động.


4
Thật tốt khi biết, tuy nhiên tôi vẫn sẽ tiếp tục tìm kiếm tính năng điều hướng nhanh hoàn hảo mà không cần chuột.
Helmut Granda

9

cá nhân tôi thích sử dụng:

"/<chars><enter>" to quickly move to somewhere   ( extremely fast! trust me! )
":<number>" to go to some line, 
"ctrl + f/b" to forward/back
"g;" to move to the last editing place.
"w/b" to move by word
"jklh" to move your cursor to the exact position

5

Với tùy chọn relativenumber( : help relativenumber - đi kèm với Vim 7.3 ), bạn có thể đi đến đường thẳng dưới mắt mình bằng a [count]khoặc [count]jchuyển động, cho phép bạn di chuyển theo dòng hiện tại với các chuyển động như được ftwebgiải thích bởi @romainl.


Tùy chọn tuyệt vời. Nhanh hơn easymotion.
Penghe Geng

5

Ngoài {, }, (, ), <number>cb, <number>cB, <number>cW%, tôi sử dụng các kỹ thuật điều hướng như vậy:

  • ciw, diw( ciW, diW). vv để nhanh chóng chỉnh sửa / xóa từ dưới con trỏ (bao gồm các ký tự không phải khoảng trắng)
  • ci(, ci"( ca(, ca"), v.v. để nhanh chóng chỉnh sửa bên trong dấu ngoặc đơn, dấu ngoặc kép (bao gồm cả dấu ngoặc đơn, dấu ngoặc kép). Điều tương tự cũng áp dụng cho d.
  • Đánh dấu bằng các chữ cái IN HOA để đặt chúng trên toàn cục (trên các tệp) và liên tục (khi bộ đệm được đóng). Ví dụ, mAsẽ tạo ra nhãn toàn cầu Asẽ có sẵn bằng 'Alệnh (hoặc `Ađối với cột).
  • gf để đi nhanh đến tệp dưới con trỏ
  • f, t( F, T) để di chuyển đến ký tự, trước ký tự phải (trái) (dùng ;để lặp lại). Chúng đặc biệt hữu ích cho dccác lệnh (sử dụng .để lặp lại).
  • ^]để chuyển đến thẻ và ^Tquay lại.

Và rất nhiều cách khác để di chuyển :)

Kiểm tra phần này để biết thêm thông tin: http://www.thegeekstuff.com/2009/03/8-essential-vim-editor-navigation-fundamentals/

PS Đối với người dùng rails, có một plugin rails-vim rất hữu ích, bạn cũng có thể muốn xem qua.


3

Đây là một nơi tốt để học các lệnh điều hướng chính, một số sức mạnh / tốc độ của vim đến từ sự kết hợp của chuyển động với hành động, tức là cw-> thay đổi từ, d10j-> xóa 10 dòng xuống, v.v. Ngoài ra, đâyđây là những bài đọc thú vị.


2

Bạn có thể :set nohlsearchtắt phần đánh dấu của các ký tự tìm kiếm của mình.

Tôi điều hướng bằng cách sử dụng thẻ ctags rất nhiều.


github.com/richoH/dotfiles/blob/master/vimrc Bạn có thể tìm thấy một số thứ hữu ích khác trong đó.
richo

Cảm ơn vì mẹo này, tôi đã xem qua vimrc của bạn và tôi tìm thấy ghi chú của bạn nơi bạn đã đặt để đánh dấu dòng khi bạn đạt đến 80 ký tự khi viết email hoặc tài liệu. Tại sao bạn lại viết email bằng VIM? Tôi có thể hiểu một tài liệu cho mục đích sử dụng cá nhân của bạn nhưng không chắc về một email.
Helmut Granda

Tôi sử dụng mutt + vim để đọc và viết phần lớn email của mình. Tôi cũng sử dụng plugin tất cả văn bản để viết nhiều nội dung web trong vim. Tôi đã bật tính năng gói từ cho email nhưng đối với các liên kết, v.v., có thể hữu ích khi có lời nhắc nếu tôi định dạng không chính xác hoặc nếu các dấu ngoặc kép lồng nhau quá dài.
richo

0

Tôi đã viết một plugin có tính năng điều hướng siêu nhanh, nó được gọi là không di chuyển:

https://github.com/anschnapp/move-less

Nó cho phép bạn tìm kiếm tệp lỗ thoải mái bằng cách cuộn với ( h j k l-keys). Bạn không thay đổi vị trí con trỏ của mình khi cuộn trang web lỗ (dựa trên mẹo gấp). Nếu bạn hủy bỏ tìm kiếm của mình, bạn chỉ ở nơi bạn bắt đầu.

Để điều hướng siêu nhanh, việc tương tác là sử dụng plugin của tôi để có được vị trí mục tiêu trên màn hình và sau đó chuyển đến đúng vị trí thông qua easymotion (đã được đề xuất từ ​​một câu trả lời khác):

https://github.com/easymotion/vim-easymotion

Nếu bạn kết hợp cả hai, bạn thậm chí có thể xem trước lịch sử nhảy và bạn có thể chuyển giữa điểm xuất phát và điểm đến đích của mình chỉ đơn giản thông qua <c-o><c-i>.

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.