Bạn có thể sử dụng giải pháp sau:
Đầu tiên sử dụng v$để chọn văn bản từ con trỏ đến cuối dòng. Sau đó sử dụng lệnh sau:
:s/\%V\ /_/g
Dấu \%V
hiệu để thay đổi văn bản trong khu vực được chọn trước đó, xem :h /\%V
.
Nếu tôi lấy ví dụ của bạn:
function my_function(argument, another argument, but there are spaces)
Nếu con trỏ của tôi ở cột thứ 40 và tôi sử dụng lệnh tôi vừa viết, tôi nhận được:
function my_function(argument, another argument,_but_there_are_spaces)
Trả lời bình luận của bạn, bạn cũng có thể sử dụng
\%#
khớp với vị trí con trỏ
\%>23c
phù hợp sau cột thứ 23.
\%>'m
phù hợp sau vị trí của một nhãn hiệu
Xem :h /\%#
, :h /\%>c
và :h /\%>'m
.
@ User9433424 đã đưa ra một cách để sử dụng \%#
trong nhận xét của mình. Đối với mẫu có dấu bạn có thể đặt mẫu mađó rồi sử dụng:
:s/\%>'a /_/g
Giải thích về mẫu được đưa ra bởi @ User9433424 như sau:
:s/\v(%#.*)@<= /_/
:s/ substitution command
\v Enable the very magic mode
%#.* Any characters from the cursor position
@<= Check for matches just before what follows
space Followed by a space
/_/ Substitute the matches by underscores
Bạn sẽ muốn xem :h \v
và:h /\@<=
\%#
. Vì vậy, bạn có thể sử dụng ::s/\v(%#.*)@<= /_/g
. Mà có thể được mô tả là khoảng trắng đứng trước@<=
ký tự ( ) sau vị trí con trỏ.