Xóa từ con trỏ đến cuối dòng trên VI


301

Tôi biết có lẽ tôi đã xem qua hàng triệu lần trong tất cả các tài liệu VI tôi đã đọc, nhưng dường như tôi không thể tìm thấy việc xóa từ con trỏ đến cuối dòng lệnh.


3
Bạn đã có một lỗi đánh máy ở đây - bạn nói "cuối dòng" trong tiêu đề, nhưng "kết thúc từ" trong câu hỏi.
Cascabel

Câu trả lời:


449

Lệnh dwsẽ xóa từ vị trí con trỏ hiện tại đến đầu ký tự từ tiếp theo. Lệnh d$(lưu ý, đó là ký hiệu đô la, không phải là 'S') sẽ xóa từ vị trí con trỏ hiện tại đến cuối dòng hiện tại. Dlà một từ đồng nghĩa với d$.


Vâng tôi biết dw, nhưng tôi đoán tôi chỉ cho rằng sẽ có lệnh "xóa phần còn lại của dòng này". Ví dụ dòng của tôi có ip=|10.1.1.1với |là vị trí con trỏ. Có một lệnh sẽ xóa tất cả 10.1.1.1?
Falmarri

3
@Falmarri - Tôi xin lỗi, tôi đã hiểu nhầm câu hỏi của bạn. Có một lệnh cho điều đó:d$
Tok

84
D (Shift + d) cũng là một từ đồng nghĩa với d $.
Neth

5
@Andy, công việc là xóa từ con trỏ đến cuối dòng. Nếu bạn coi việc xóa nhiều hơn thế là "thực hiện công việc", bạn cũng có thể chỉ cần sử dụng :!rm -f %và sau đó :q!. Điều đó xóa toàn bộ tập tin.
tự đại diện

2
@Amir Chỉ cần sử dụng d^('d' + caret) ... về cơ bản d + bất kỳ nhân vật nào thường di chuyển con trỏ tôi nghĩ, nhưng tôi đang tự học Vim, vì vậy tôi có thể sai về điều đó.
JakeD

41

Như những người khác đã đề cập: bạn có thể sử dụng d$hoặc D( shift- d) để xóa từ vị trí con trỏ cho đến cuối dòng.

Những gì tôi thường thấy hữu ích hơn là c$hoặc C( shift- c) vì nó sẽ xóa khỏi vị trí con trỏ cho đến cuối dòng đưa bạn vào chế độ [INSERT].


2
ĐẸP!!! Điều này tốt hơn nhiều so Dvới hầu hết mọi người, theo ý kiến ​​của tôi, vì nó không đưa bạn trở lại một khoảng trống ở cuối dòng.
Elijah Lynn

Tại sao câu trả lời này được ẩn giấu ở đây? Đây là chức năng tôi thực sự tìm kiếm khi đến đây.
M_M

@ElijahLynn dù sao nó cũng không phải là vấn đề. Vim có hai cách chính để vào chế độ chèn i, chèn trước con trỏ và achèn sau con trỏ. Nếu con trỏ của bạn ở cuối dòng và bạn muốn chèn ở cuối dòng, bạn chỉ có thể sử dụng a.
Lie Ryan

1
Mục tiêu là để làm điều đó trong một hoạt động, không phải hai. Thêm nét đột quỵ = ma sát thêm.
Elijah Lynn

36

Một trong những điều tốt đẹp về vi là cấu trúc lệnh logic của nó. dtheo sau là một lệnh chuyển động d bỏ qua mục tiêu của chuyển động đó. $di chuyển đến cuối dòng (mnemonic: like in regexps). Vì vậy, d$xóa đến cuối dòng. Tương tự, edi chuyển đến e nd của từ hiện tại, và wdi chuyển đến đầu tiếp theo w ord; vì vậy dexóa phần cuối của từ hiện tại và dwxóa thêm khoảng trắng sau.


1
@gioele Tôi sử dụng <kbd>cho các khóa thực tế, không phải cho các chuỗi lệnh. Ví dụ <kbd>Ctrl</kbd>+<kbd>C</kbd>, nhưng d$.
Gilles

@Gilles Bạn nói đúng. Tôi vừa thử d ^ và nó đã xóa từ vị trí con trỏ đến dòng bắt đầu.
ka3ak

Tôi đã luôn sử dụng (d) elete (a) (w) ord để xóa các từ :)
Błażej Michalik

20

Bạn có thể muốn sử dụng D. Di chuyển con trỏ đến ký tự đầu tiên bạn muốn xóa, sau đó nhấn shift-D. Mọi thứ đã biến mất. Trên thực tế, nó nằm trong bộ đệm cắt mặc định, vì vậy bạn có thể P hoặc p dán lại.

Tôi sử dụng Dp (xóa đến cuối dòng, sau đó đặt lại), di chuyển đến cuối một số dòng khác, sau đó p một lần nữa để dán cùng một văn bản ở cuối dòng khác này. Hoạt động kỳ diệu trong các tệp cấu hình, nơi bạn cần đặt một số URL phức tạp ở hai hoặc nhiều nơi.


Có lẽ đó là một Vim tối thiểu mà anh ta sử dụng.
Polemon

0

Tôi nghĩ rằng một phím tắt chế độ chèn có thể có ích.

Trong chế độ chèn có thể tốt hơn là bắt đầu thay đổi cho đến khi kết thúc dòng (đặt cái này vào của bạn ~/.vimrc):

inoremap <C-l> <C-o>C

Vì vậy, như bạn đã nói, Dở chế độ bình thường và Ctrl+ lở chế độ chèn. Như bạn có thể thấy bạn cũng Cbắt đầu thay đổi cho đến cuối dòng.

<C-o> ......... insert normal keystroke in insert mode

Tôi đã chọn Ctrl- lbởi vì ldưới ngón tay của bạn. Các Ctrl- kđã được sử dụng để chèn chữ ghép.

Tôi đã tìm kiếm thông qua :h i_Ctrlmột số keybindings miễn phí, và nó thực sự là vấn đề lớn hơn khi tạo ra các phím tắt mới để thực hiện các hành động trong vim.


0

Để xóa một phạm vi các dòng từ sau vị trí con trỏ, 3Dsẽ xóa từ con trỏ cho đến hết dòng, cũng như hai dòng tiếp theo (nghĩa là xóa 3 dòng sau vị trí con trỏ).

ví dụ: cho văn bản sau (con trỏ đại diện là |),

If there's a cursor |in the line
here
we
go

Sử dụng lệnh 3Dsẽ xuất ra:

If there's a cursor
go
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.