Xóa từ con trỏ cho đến lần xuất hiện thứ n của ký tự x


15

Tôi biết rằng tôi có thể xóa từ con trỏ cho đến và bao gồm cả lần xuất hiện đầu tiên của ký tự x với d/x<CR>hoặc v/x<CR>dnếu tôi muốn xem lựa chọn trước rồi xóa. Làm cách nào tôi có thể xóa từ vị trí con trỏ hiện tại cho đến lần xuất hiện thứ n của x ?

Ví dụ: nếu con trỏ ở sau khoảng trắng đầu tiên trong

yada yada yada
yada yada yada x
yada yada yada x
yada yada yada x

xx

và tôi gõ một lệnh để loại bỏ tối đa x thứ ba , kết quả cần phải là:

yada
xx

Câu trả lời:


21

Bạn có thể làm :

wd4/x<Enter>

Nếu bạn bắt đầu ở phía trên bên trái của văn bản của bạn

Giải trình

  • w : di chuyển đến đầu từ tiếp theo
  • d : xóa bỏ
  • 4/x<Enter> : cho đến lần xuất hiện thứ 4 của x

Nếu bạn không biết số lần bạn muốn làm trước đó, bạn cũng có thể làm: d/x<Enter>và sau đó nhấn .để lặp lại


5
Mẹo thêm: còn này làm việc với fvà bạn bè ( F, t, T, ;): ví dụ 2fxsẽ giúp bạn có được thứ hai x, hoặc 2;sẽ lặp lại cuối cùng fhai lần.
Martin Tournoij

1
@Carpetsmoker: Điều này chỉ hoạt động cho các chữ cái trong dòng hiện tại.
Jürgen Krämer

5

Bạn có thể làm điều này bằng cách gõ

<n>df<x>

Ở đâu:

<n> is the number of occurrence of particular character
df<x> means delete till you find the occurrence of character x

0
<n>macro 

thường được sử dụng trong vim để lặp lại macro "n" lần.

Vì vậy, để xóa cho đến lần xuất hiện đầu tiên của x, bạn sẽ sử dụng 1dfx. Tương tự, để xóa cho đến lần xuất hiện thứ 3 của x, bạn sẽ sử dụng 3dfx.


1
Tôi nghĩ rằng bạn đã bỏ lỡ từ "macro": trong vim, macro là một chuỗi các khóa được ghi trong một thanh ghi và gọi @xnơi xđăng ký của bạn. Những gì bạn đang đề cập đến là một lệnh chế độ bình thường.
statox

Vâng, tôi có nghĩa là một lệnh bình thường. Nhưng điều này cũng đúng với một vĩ mô. Chúng ta có thể chạy macro n lần bằng cách thêm một số trước macro.
thenakulchawla

1
Vâng đó là sự thật. Tôi chỉ chỉ ra rằng đó <n>macrokhông phải là một ký hiệu chuẩn trong vim cho các macro và vì câu trả lời của bạn sử dụng lệnh chế độ bình thường, nó khá giống với ký hiệu của kapil.
statox

0

Được:

yada yada yada$
yada yada yada x$
yada yada yada x$
yada yada yada x$
xx$

trong đó $dấu hiệu kết thúc của dòng ( :set listchế độ), nếu con trỏ ở đầu dòng thứ hai yadatrong dòng đầu tiên, trước tiên chúng ta phải sao lưu vào không gian trước bằng cách sử dụng h, để đưa nó vào phần xóa. Sau đó chỉ là 4d/xEnter. Nói cách khác, chỉ là một đếm trước mặt d/x. Kết quả là chính xác:

yada$
xx$
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.