Tôi muốn thêm *
vào cuối mỗi dòng trong Vim.
Tôi đã thử mã không thành công
:%s/\n/*\n/g
Tôi muốn thêm *
vào cuối mỗi dòng trong Vim.
Tôi đã thử mã không thành công
:%s/\n/*\n/g
Câu trả lời:
:%s/$/\*/g
nên làm việc. Vì vậy, :%s/$/*/g
như MrWiggles chỉ ra chính xác.
g
cờ là không cần thiết.
Thậm chí ngắn hơn lệnh: search:
:%norm A*
Đây là những gì nó có nghĩa là:
% = for every line
norm = type the following commands
A* = append '*' to the end of current line
I*
chứ không phải 0i*
giúp bạn tiết kiệm một lần nhấn phím.
:
, điều này sẽ điền trước lệnh :'<,'>
mà sau đó bạn có thể thực hiện:'<,'>norm A*
I
thay thế -:%norm I*
Cũng thế:
:g/$/norm A*
Cũng thế:
gg<Ctrl-v>G$A*<Esc>
g
là global
lệnh thực hiện điều gì đó với mọi dòng khớp. $
phù hợp với mọi dòng. Nó cũng có thể ^
hoặc .*
. Norm thực thi các lệnh mà bạn thường sử dụng trong chế độ lệnh. Vì vậy, A*
có nghĩa là nối *
vào cuối dòng.
Tôi nghĩ rằng sử dụng chế độ khối trực quan là một phương pháp tốt hơn và linh hoạt hơn để xử lý loại điều này. Đây là một ví dụ:
This is the First line.
This is the second.
The third.
Để chèn "Xin chào thế giới." (dấu cách + bảng tạm) ở cuối mỗi dòng này:
Kết quả là:
This is the First line. Hello world.
This is the second. Hello world.
The third. Hello world.
(ví dụ từ Vim.Wikia.com )
jj
người ta có thể nhấn G
để di chuyển đến dòng cuối cùng. Điều này hữu ích trong các tệp lớn, khi nhấn j
cho đến khi bạn nhấn dòng cuối cùng là không thực tế.
Nếu bạn muốn thêm thế giới Hello ở cuối mỗi dòng:
:%s/$/HelloWorld/
Nếu bạn muốn làm điều này với số lượng dòng cụ thể, từ 20 đến 30 sử dụng:
:20,30s/$/HelloWorld/
Nếu bạn muốn làm điều này ở đầu mỗi dòng thì sử dụng:
:20,30s/^/HelloWorld/
Bạn không thực sự cần g
đến cuối cùng. Vì vậy, nó trở thành:
:%s/$/*
Hoặc nếu bạn chỉ muốn *
ở cuối, hãy nói dòng 14-18:
:14,18s/$/*
hoặc là
:14,18norm A*
... và để thêm vào (thêm phần đầu) mỗi dòng bằng *,
%s/^/*/g
Một lựa chọn là:
:g/$/s//*
Điều này sẽ tìm thấy tất cả các dòng kết thúc neo và thay thế nó bằng *
. Tôi nói "thay thế" nhưng thực tế, nó giống như một phần phụ vì mỏ neo là một thứ đặc biệt hơn là một nhân vật thông thường. Để biết thêm thông tin, xem Sức mạnh của g - Ví dụ .
:% s / \ n / * \ r / g
Cái đầu tiên của bạn là chính xác ở bất cứ nơi nào khác, nhưng Vim phải xử lý dòng mới khác nhau vì một số lý do.
:s///
,\n
tương ứng với một ký tự null. Phần:help sub-replace-special
này có liên quan.