Tôi đã cố gắng làm theo như sau:
Cách xóa văn bản đã chọn trong trình chỉnh sửa VI
nhưng
5dd
cho
E492: Không phải là lệnh biên tập: 5dd
Sau đó tôi đã thử:
5d
Mà chỉ xóa một dòng duy nhất. Làm thế nào tôi có thể xóa nhiều dòng?
Tôi đã cố gắng làm theo như sau:
Cách xóa văn bản đã chọn trong trình chỉnh sửa VI
nhưng
5dd
cho
E492: Không phải là lệnh biên tập: 5dd
Sau đó tôi đã thử:
5d
Mà chỉ xóa một dòng duy nhất. Làm thế nào tôi có thể xóa nhiều dòng?
Câu trả lời:
Âm thanh như bạn đang nhập lệnh trong chế độ lệnh (hay còn gọi là "Chế độ Ex"). Trong bối cảnh :5d
đó sẽ loại bỏ dòng số 5, không có gì khác. Để 5dd
hoạt động như dự định - nghĩa là xóa năm dòng kết quả bắt đầu từ con trỏ - nhập nó vào chế độ bình thường và không đặt tiền tố cho các lệnh với :
.
Tôi thấy điều này dễ dàng hơn
/superuser/170795/how-can-i-select-and-delete-lines-of-text-in-vi
Bạn có thể xóa nhiều dòng (phạm vi) nếu bạn biết số dòng:
:[start_line_no],[end_line_no]d
Lưu ý: d là viết tắt của xóa
trong đó,
start_line_no là dòng bắt đầu không bạn muốn xóa và end_line_no là dòng kết thúc mà bạn không muốn xóa. Các dòng giữa bắt đầu và kết thúc, bao gồm bắt đầu và kết thúc sẽ bị xóa.
Ví dụ:
:45,101d
Các dòng giữa 45 và 101 bao gồm 45 và 101 sẽ bị xóa.
$
để biểu thị dòng cuối cùng trong tệp. Vì vậy, :45,$d
sẽ xóa mọi dòng từ 45 cho đến hết.
/<\/div>/
:.,[end_line_no]d
Các lệnh được liệt kê để sử dụng trong chế độ bình thường (tiền tố với :chế độ lệnh).
Đã thử nghiệm ở Vim.
Theo số lượng dòng:
Theo số dòng:
Backwards range given, OK to swap (y/n)?
Nếu bạn thích một phương thức chế độ không trực quan và thừa nhận số dòng, tôi muốn gợi ý cho bạn một cách đơn giản khác.
Thí dụ
Tôi muốn xóa văn bản từ dòng 45 đến dòng 101.
Phương pháp của tôi gợi ý bạn nhập lệnh dưới đây trong chế độ lệnh:
45Gd101G
Nó đọc:
Chuyển đến dòng 45 (
45G
) sau đó xóa văn bản (d
) khỏi dòng hiện tại sang dòng 101 (101G
).
Lưu ý rằng vim
bạn có thể sử dụng gg
thay cho G
.
So sánh với câu trả lời của @Bonnie Varghese là:
:45,101d[enter]
Lệnh trên từ câu trả lời của anh ta yêu cầu 9 lần gõ bao gồm enter, trong đó câu trả lời của tôi yêu cầu gõ 8 - 10 lần. Vì vậy, một tốc độ của phương pháp của tôi là tương đương.
Cá nhân, bản thân tôi thích 45Gd101G
hơn :45,101d
vì tôi thích theo cú pháp của lệnh vi, trong trường hợp này là:
+---------+----------+--------------------+
| syntax | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command | 45G | d101G |
+---------+----------+--------------------+
Nhấn Escphím để đảm bảo bạn không ở chế độ chỉnh sửa. Đặt con trỏ trên dòng đầu tiên sẽ bị xóa. Nhập :5dd
. Dòng hiện tại và bốn dòng tiếp theo sẽ bị xóa.
Thay phiên, nếu bạn đã bật đánh số dòng ...
Nhấn Escphím để đảm bảo bạn không ở chế độ chỉnh sửa. Nhập :#,#d
nơi '#' là viết tắt của số dòng bắt đầu và kết thúc sẽ bị xóa.
Nếu bạn muốn xóa một phạm vi SAU một kích hoạt dòng cụ thể, bạn có thể sử dụng một cái gì đó như thế này
:g/^TMPDIR/ :.,+11d
Điều đó xóa 11 dòng (bao gồm) sau mỗi lần gặp ^TMPDIR
.
Để xóa tất cả các dòng sử dụng - ESC gg dG Để xóa một vài dòng, hãy nói 5 sau đó sử dụng ESC 5dd
Nó có thể được thực hiện như sau ..