vim xóa thủ đoạn lạc hậu


119
  • Làm thế nào để xóa một từ bên trái? Nói cách khác, xóa từ khi con trỏ đứng ở cuối từ.
  • Làm thế nào để xóa một ký tự ở đầu dòng?
  • Làm thế nào để xóa một khoảng trắng đầu tiên bên trái?

  • Bất kỳ thủ đoạn khác liên quan đến xóa từ?

Câu trả lời:


163

Nói chung, d <motion> sẽ xóa từ vị trí hiện tại đến vị trí kết thúc sau <chuyển động>. Điều này có nghĩa rằng:

  1. d <leftArrow> sẽ xóa ký tự hiện tại và bên trái
  2. d $ sẽ xóa từ vị trí hiện tại đến cuối dòng
  3. d ^ sẽ xóa từ ký tự ngược hiện tại sang ký tự không phải khoảng trắng đầu tiên
  4. d0 sẽ xóa từ lùi hiện tại đến đầu dòng
  5. dw xóa hiện tại đến cuối từ hiện tại (bao gồm cả dấu cách)
  6. db xóa hiện tại để bắt đầu từ hiện tại

Đọc phần này để tìm hiểu tất cả những điều bạn có thể kết hợp với lệnh 'd'.


1
Một phím tắt tiện dụng khác trong trường hợp bạn cảm thấy dbkhó nhớ: 5. dw or d<ctrl+rightarrow>6. db or d<ctrl+leftarrow>
Crisboot

6
Thay vì gõ d<leftArrow>làm dhthay vào đó, kể từ khi hlà chìa khóa cho di chuyển sang trái
Dylanthepiguy

4
Tại sao câu trả lời này được chấp nhận? d <leftArrow> (và không thuộc bên dưới trừ dw) sẽ không xóa ký tự dưới một con trỏ như OP muốn.
listerreg

73

Tôi đã ở trong kịch bản này nhiều lần. Tôi muốn loại bỏ tất cả các khoảng trắng trong dòng 10 để nó sẽ tham gia với dòng 9 sau dấu phẩy.

nhập mô tả hình ảnh ở đây

Đây về cơ bản là một dòng đơn giản tham gia vào VIM.

kJ lừa không (xem bên dưới)

Vim Tham gia dòng


9
Tôi đã tìm kiếm nó khắp nơi!
chức năng

2
haha, tôi muốn cái này và tôi không biết làm thế nào để mô tả nó trong Google. Thật may mắn khi tôi cuộn xuống =))
Thai Tran

1
Không thể tin được bao nhiêu lần tôi đã làm điều này bằng tay. Đây chính xác là những gì tôi đang tìm kiếm, CẢM ƠN!
tobiasandersen

1
điều này thật đúng với gì mà tôi đã tìm kiếm. Vim thổi vào tâm trí tôi hàng ngày
singmotor

4
Giải thích cho điều này là: k= Up, J= Nối dòng bên dưới với dòng hiện tại có một khoảng trắng ở giữa. Bạn cũng có thể làm kgJđể tham gia mà không có không gian. gJ= Tham gia dòng bên dưới mà không có khoảng trống ở giữa. Qua áo choàng
KhalilRavanna

31

Để trả lời điểm # 3, diwdawlà tuyệt vời.


4
Tôi thấy buồn vì không có lệnh hai ký tự để xóa một từ ngược khi bạn ở chữ cái cuối cùng, bởi vì trong các trình soạn thảo tiêu chuẩn như notepad ++, gedit, v.v. bạn có thể dễ dàng sử dụng CTRL + Backspace ... ngoại trừ từ đó vim là tuyệt vời.
itmuckel 04/07/2015

3
@ roggan87 Nếu bạn đang ở chữ cái cuối của từ, hãy dbxóa các chữ cái trước chữ cái cuối cùng nhưng vẫn để lại chữ cái cuối cùng.
Prashanth Chandra

2
Bạn có thể giải thích những gì iađang làm ở giữa những lệnh đó không? Tôi biết rằng hàng đầu dlà "xóa" và tôi cho rằng dấu sau wlà "từ".
Carl G

1
@CarlG Giải thích tốt nhất là trong :help text-objects. Đoạn đầu rất súc tích và tôi nghĩ mô tả nó rất hay.
Randy Morris

5
<kbd> i </ kbd> là "bên trong" và <kbd> a </ kbd> là "a", như trong "một từ". Cái trước sẽ không bao gồm khoảng trắng bao quanh, trong khi cái sau sẽ bao gồm khoảng trắng theo sau, nếu có, nếu không, sẽ bao gồm khoảng trắng trước. Rất hữu ích, cảm ơn bạn.
Carl G

25

Trong chế độ chèn:

  • ^ w
  • ^ u
  • không thể trả lời ra khỏi đầu tôi ;-)

Nếu không thì:

  • l
  • v0x
  • không thể trả lời ra khỏi đầu tôi ;-)

Tôi không biết rằng tôi có thể xóa từ trong chế độ Chèn trong Vim. Điều này giúp rất nhiều.
Đỗ Tiến

18

Trong chế độ lệnh:

  1. bdw, lại xóa từ.
  2. d^(để không trống đầu tiên), d0(cho ký tự đầu tiên)
  3. BdW (đi tới xóa khoảng trắng đầu tiên sang khoảng trắng tiếp theo)

(Wiki cộng đồng, vui lòng hack.)


14
  1. db (nếu con trỏ ở sau từ) hoặc bdw
  2. d0(hoặc d^nếu bạn muốn xóa ký tự không trống đầu tiên)
  3. dEhoặc dtSpacexóa sang khoảng d/\sEntertrắng đầu tiên hoặc xóa sang ký tự khoảng trắng tiếp theo.

Biên tập

Vì câu hỏi đã được thay đổi sao cho 3 bị xóa thành ký tự khoảng trắng đầu tiên bên trái, câu trả lời của tôi sẽ thay đổi thành:

  1. dBhoặc dShiftTSpaceđể xóa trở lại khoảng d?\sEntertrắng đầu tiên hoặc xóa sang ký tự khoảng trắng trước đó.

Xem:

:help motion.txt
:help WORD

Cuộc gọi tốt trên # 3. Tôi không chắc chắn làm thế nào để xử lý bất kỳ khoảng trắng. Điều đáng nói là dF <SPACE> sẽ xóa tối đa và bao gồm cả <SPACE> trong khi dT <SPACE> sẽ để lại <SPACE> ở đó.
Đánh dấu Biek

Đến đây để tìm kiếm một cái gì đó như bdw. Các ký tự còn lại (ký tự ban đầu dưới con trỏ) dbkhiến tôi khó chịu.
Deiwin

8

Tôi cảm thấy rằng không có câu trả lời nào là hoàn chỉnh:

Nói chung, bạn thường bắt đầu một thao tác xóa bằng cách sử dụng d<motion>và hiếm khi sử dụng x.

Lưu ý: Khi Nkhông được chỉ định, hành xử như thể N=1(xóa một ký tự đơn)

Các ký tự rời rạc:

<N>x - Xóa N ký tự bên phải

d<N><left-arrow> - Xóa N ký tự bên trái

d<N><right-arrow> - Xóa N ký tự bên phải

Ranh giới từ:

Lưu ý: Từ trước / thành công đầu tiên là từ dưới con trỏ

d<N>b - Xóa từ đầu từ N-th trước đến vị trí hiện tại

d<N>e - Xóa từ vị trí hiện tại đến cuối từ N-th tiếp theo

d<N>w- Giống như d<N>enhưng bao gồm cả khoảng trắng theo sau

diw - Xóa toàn bộ từ dưới con trỏ

daw- Giống như diwnhưng bao gồm cả khoảng trắng theo sau

Ranh giới dòng:

d0 - Xóa từ đầu dòng đến vị trí hiện tại

d^ - Xóa từ char không phải khoảng trắng đầu tiên đến vị trí hiện tại

d$ - Xóa từ vị trí hiện tại đến cuối dòng


1

/ <CR>x

(tìm kiếm một khoảng trắng, nhấn enter để đến đó, x để xóa)

Có thể có một cách kỳ diệu hơn để làm điều đó, nhưng tôi không biết về nó.


Nếu bạn muốn xóa khoảng trắng đầu tiên bên trái, nhấn? thay vì / trong ví dụ của tôi.
brettkelly
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.