Làm thế nào để tôi di chuyển đến cuối dòng trong Vim?


1194

Tôi biết cách thường di chuyển xung quanh trong chế độ lệnh, cụ thể là nhảy đến các dòng, v.v ... Nhưng lệnh nào để nhảy đến cuối dòng mà tôi hiện đang làm?


19
Các lệnh vim cơ bản được trình bày trong chưa đầy 10 phút youtube.com/watch?v=71YTkxUNwmg
eomeroff

14
Có gì sai khi dành vài phút chạy qua vimtutor? Đây là một phần của bản cài đặt Vim của bạn và đã cho bạn thấy những điều cơ bản.
dash-tom-bang

@ dash-tom-bang Vâng, họ có điểm khá cao ở đây ... :) Nhưng đúng vậy, bạn đúng vimtutorlà tuyệt vời. Có lẽ họ không biết về nó?
Pryftan

Câu trả lời:


2051

Chỉ cần phím $ (ký hiệu đô la) . Bạn có thể sử dụng Ađể di chuyển đến cuối dòng và chuyển sang chế độ chỉnh sửa (Nối). Để nhảy nhân vật phi trống cuối cùng, bạn có thể nhấn gsau đó _phím.

Ngược lại AI(Chế độ chèn ở đầu dòng), như là một bên. Chỉ nhấn ^sẽ đặt con trỏ của bạn vào ký tự không phải khoảng trắng đầu tiên của dòng.


81
Nhảy tới chỗ trống cuối cùngg_
SergioAraujo

2
Đôi khi, g_biến thể hữu ích hơn vì nó không bao gồm các ký tự trống
rogercampos

6
Biến thể _g thực sự hữu ích khi làm việc ở chế độ trực quan, vì nó cho phép bạn sử dụng dòng mà không có bất kỳ dòng mới nào ở cuối.
Greg Robbins

2
Trong khi phím Home và End hoạt động trên bàn phím thông thường, cần có $ và ^ khi bạn đang sử dụng máy tính xách tay :)
Sridhar Sarnobat

Bạn nên thêm ^ vào danh sách.
Tek

304

Như nhiều người đã nói:

  • $ đưa bạn đến cuối dòng

nhưng cũng:

  • ^hoặc đưa _bạn đến ký tự không phải khoảng trắng đầu tiên trong dòng và
  • 0(không) đưa bạn đến đầu dòng bao gồm. khoảng trắng

Tôi biết đưa chúng tôi đến đầu dòng nhưng tôi không biết 0. Vì vậy, cả 0 và | làm chính xác điều tương tự, yeah?
Kamran Bigdely

8
@kami: trong khi các mô tả khác nhau, chúng dường như cư xử giống hệt nhau. Tuy nhiên, |lệnh ống có thể mất một số đếm, ví dụ 3 | để nhảy đến cột thứ ba.
Paul Ruane

136
  • $ di chuyển đến nhân vật cuối cùng trên dòng.
  • g _ đi đến ký tự không phải khoảng trắng cuối cùng.

  • g $ đi đến cuối dòng màn hình (khi một dòng đệm được bọc trên nhiều dòng màn hình)


Tôi cảm thấy như g_ giống với $ b
Dave Aaron Smith

3
@DaveAaronSmith: bđi đến đầu của từ trước đó không giống nhau chút nào. Nó gần tương đương với $ge.
Paul Ruane

9
Tôi sử dụng _g_để trực quan / yanking, $cũng sẽ sao chép / xóa ký tự dòng mới (LN).
Ernest

Đối với tôi, $ đi đến cuối dòng màn hình hiện tại (khi được bọc). Tôi đã không thể tìm ra lý do tại sao. g_là cách duy nhất tôi tìm thấy để đi đến cuối dòng thực sự.
ezuk

@ezuk $đi đến cuối hàng ngay cả khi quấn lấy tôi. Tôi biết không có thiết lập để điều chỉnh hành vi của nó. Có lẽ nó đã được ánh xạ lại bởi .vimrc của bạn g$?
Paul Ruane

66

Câu hỏi chính - cuối dòng

$ đi đến cuối dòng, vẫn ở chế độ lệnh

A Đi đến cuối dòng, chuyển sang chế độ chèn

Ngược lại - bắt đầu dòng (về mặt kỹ thuật là ký tự không phải khoảng trắng đầu tiên )

^ đi đến đầu dòng, vẫn ở chế độ lệnh

I (chữ hoa i) đi đến đầu dòng, chuyển sang chế độ chèn

Hơn nữa - bắt đầu dòng (về mặt kỹ thuật là cột đầu tiên không phân biệt khoảng trắng )

0 (không) đi đến đầu dòng, vẫn ở chế độ lệnh

0i (số 0 theo sau là chữ thường i) đi đến đầu dòng, chuyển sang chế độ chèn

Đối với những người bắt đầu tìm hiểu vi, đây là một giới thiệu tốt về vi bằng cách liệt kê các lệnh vi cạnh nhau cho các phím tắt và phím tắt con trỏ của Trình soạn thảo GUI GUI điển hình.

vi biên tập cho người dùng Windows


3
Sự tương tự Ikhông phải là , 0nhưng ^cả hai I^đi đến ký tự không phải khoảng trắng đầu tiên của dòng nhưng 0đi đến cột số không (như tên của nó ngụ ý).
wchargein

@wchargein đúng, nghĩ rằng tôi dường như không thể tìm thấy sự tương tự 0sẽ là gì? (đi đến ký tự đầu tiên (= cột 0) của dòng và chuyển sang chế độ chèn)
franssu

@franssu: Người duy nhất tôi biết là 0i. :-)
wchargein

@wchargein - Cảm ơn sự đúng đắn về kỹ thuật. Tôi đã cập nhật bài viết.
ap-osd

42

Nếu dòng hiện tại của bạn bao quanh màn hình hiển thị trên dòng tiếp theo, bạn có thể sử dụng g $ để đến cuối dòng màn hình .


3
Tôi mới phát hiện ra các lệnh lên và xuống trước với g khiến vim di chuyển con trỏ dựa trên màn hình, thay vì dựa trên dòng. Tức là gjgk cho phép bạn di chuyển lên xuống trên một hàng dài. Thực sự hữu ích.
Druckles

1
Cũng phát hiện ra rằng gõ gw và một cái gì đó dường như thay đổi jk vĩnh viễn để hành xử như thế này. Không biết làm thế nào hoặc tại sao. Bất cứ ai có thể giải thích điều này?
Druckles

4
@Druckles: Một chút trả lời muộn, nhưng nếu bạn vẫn đang tự hỏi, (hoặc nếu có ai khác đọc cái này) gwgqlà các lệnh định dạng lại văn bản. (xem :h gw:h gq) Những gì có thể xảy ra là bạn đã làm gw{motion}và thay đổi một số văn bản để các dòng màn hình tương ứng với các dòng thực tế.
Đại bàng


13

Trong nhiều trường hợp, khi chúng tôi ở trong một chuỗi, chúng tôi được bao quanh bởi một trích dẫn kép hoặc trong khi viết một tuyên bố, chúng tôi không muốn nhấn thoát và đi đến cuối dòng đó bằng phím mũi tên và nhấn dấu chấm phẩy ( ;) chỉ để kết thúc dòng. Viết dòng sau trong tệp vimrc của bạn :

imap <C-l> <Esc>$a

Dòng này nói gì? Nó ánh xạ Ctrl + l tới một loạt các lệnh. Nó tương đương với việc bạn nhấn Esc(chế độ lệnh), $(cuối dòng), a(nối thêm) cùng một lúc.


cảm ơn vì điều đó Tôi đã muốn thêm Ctrl-e trở lại vim của mình khi đi đến cuối dòng như trên máy đầu tiên của tôi và không biết làm thế nào
tristanbailey

1
Như câu trả lời được chấp nhận nói, bạn có thể nhấn A để làm điều tương tự.
phân chia

4
@trysis bạn đã hiểu nhầm, điều này không di chuyển khỏi chế độ chỉnh sửa khá đẹp.
Marconi

2
Bạn đúng. vimchắc chắn cho phép bạn làm nhiều hơn trong thời gian ít hơn nhiều với những thứ như thế này. @razor े, một điều chỉnh nhỏ sẽ là imap <C-l> <Esc>A, điều này làm cho Ctrl + l tương đương với việc nhấn Esc(chế độ chèn thoát), sau đó A(nối vào cuối dòng).
phân tích

3
Tôi nghĩ rằng cách thành ngữ hơn để lập bản đồ này sẽ làinoremap <C-l> <C-o>A
bennyty

12

Ưu điểm của phím 'Kết thúc' là nó hoạt động ở cả chế độ thường và chế độ chèn.

'$' chỉ hoạt động ở chế độ bình thường / lệnh nhưng nó cũng hoạt động trong trình soạn thảo vi cổ điển (cần biết khi nào không có vim).


38
Bạn treo xung quanh chế độ chèn để làm gì?! Không có công dân tử tế bình thường đến đó sau ánh sáng ban ngày. Bạn biết những gì xảy ra trong đó, phải không? Mã biến mất ở đó, bạn biết không? Nó biến mất, và không bao giờ được nghe từ một lần nữa.
Rook

3
Cảm ơn bạn vì điều này, vì tôi muốn ở trong Chế độ chèn khi tôi đã vào nó. Thật không may, máy tính xách tay của tôi không có phím Kết thúc. :(
ray

12

Cũng lưu ý phân biệt giữa dòng (hoặc có lẽ là dòng vật lý) và dòng màn hình . Một dòng được chấm dứt bởi ký tự End Of Line ("\ n"). Một dòng màn hình là bất cứ điều gì xảy ra để được hiển thị dưới dạng một hàng ký tự trong thiết bị đầu cuối hoặc trong màn hình của bạn. Cả hai sẽ tách ra nếu bạn có các dòng vật lý dài hơn chiều rộng màn hình, điều này rất phổ biến khi viết email và như vậy.

Sự khác biệt cũng xuất hiện trong các lệnh cuối dòng.

  • $0di chuyển đến cuối hoặc đầu dòng vật lý hoặc đoạn tương ứng:
  • g$g0di chuyển đến cuối hoặc đầu dòng màn hình hoặc đoạn tương ứng.

Nếu bạn luôn thích hành vi sau, bạn có thể sắp xếp lại các phím như thế này:

:noremap 0 g0
:noremap $ g$

1
Làm thế nào để đến được khoảng trắng cuối cùng của dòng? (cho dù đó là một dòng màn hình hay dòng vật lý)
Kamran Bigdely

g_là khoảng trắng cuối cùng của dòng vật lý . Làm thế nào về dòng màn hình?
phân tích

10

Nhấn Ađể vào chế độ chỉnh sửa bắt đầu ở cuối dòng.


9

Hoặc có câu trả lời rõ ràng: sử dụng Endchìa khóa để đi đến cuối dòng.


1
Vâng, thiết bị đầu cuối mac là một trong những gì tôi đã nhận thấy rằng chiếm quyền điều khiển và không chuyển chúng cùng với những thứ chạy bên trong thiết bị đầu cuối. Một trong những điều làm tôi khó chịu mỗi khi tôi sử dụng máy Mac một chút.
davr

Toàn bộ quan điểm của việc sử dụng vim là không phải sử dụng các phím như 'Kết thúc'. Không bao giờ rời khỏi nhà hàng.
Jon Thoroddsen 7/1/2015

7
Trên Mac không có phím End.
kenorb

1
@kenorb Có khi tôi đăng bình luận ... nhưng Apple thích loại bỏ các tính năng trong những năm qua. netdna.webdesignerdepot.com/uploads/2009/01/ trên đây thực sự là một trong những bàn phím yêu thích của tôi mọi thời đại
davr

9

Tôi không thể thấy hotkey cho macbook để sử dụng vim trong thiết bị đầu cuối tiêu chuẩn. Hy vọng nó sẽ giúp được ai đó. Đối với người dùng macOS (đã thử nghiệm trên macbook pro 2018):

fn+ - di chuyển đến vạch xuất phát

fn+ - di chuyển đến dòng kết thúc

fn+ - di chuyển trang lên

fn+ - di chuyển trang xuống

fn+ g - di chuyển con trỏ đến phần đầu của tài liệu

fn+ shift + g - di chuyển con trỏ đến cuối tài liệu

Đối với hai lệnh cuối đôi khi cần phải gõ hai lần.


6

Có thể không liên quan, nhưng nếu bạn muốn bắt đầu một dòng mới sau dòng hiện tại, bạn có thể sử dụng o bất cứ nơi nào trong dòng.


3

Tùy chọn dễ nhất sẽ là chính $. Nếu bạn đang làm việc với các khối văn bản, bạn có thể đánh giá cao lệnh {}để di chuyển một đoạn tương ứng trở lại.


2

Tôi đã quen với Home / End đưa tôi đến điểm bắt đầu và kết thúc của dòng ở chế độ Chèn (từ sử dụng trong Windows và tôi nghĩ Linux), mà Mac không hỗ trợ. Điều này đặc biệt khó chịu vì khi tôi sử dụng vim trên một hệ thống từ xa, tôi cũng không thể dễ dàng làm điều đó. Sau một số thử nghiệm và lỗi đau đớn, tôi đã nghĩ ra những .vimrcdòng này làm điều tương tự, nhưng bị ràng buộc với Ctrl-A cho phần đầu của dòng và Ctrl-D cho đến cuối dòng. (Vì một số lý do, Ctrl-E tôi đoán là dành riêng hoặc ít nhất tôi không thể tìm ra cách để ràng buộc nó.) Tận hưởng.

:imap <Char-1> <Char-15>:normal 0<Char-13>
:imap <Char-4> <Char-15>:normal $<Char-13>

Có một biểu đồ tốt ở đây cho các mã ký tự điều khiển ASCII ở đây cho những người khác:

http://www.physics.udel.edu/~watson/scen103/ascii.html

Bạn cũng có thể thực hiện Ctrl-V + Ctrl-, nhưng điều đó cũng không dán vào những nơi như thế này.

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.