คุณสามารถใช้วิธีแก้ไขปัญหาต่อไปนี้:
ใช้งานครั้งแรกv$เพื่อเลือกข้อความจากเคอร์เซอร์ไปที่ท้ายบรรทัด จากนั้นใช้คำสั่งต่อไปนี้:
:s/\%V\ /_/g
บ่งบอกถึงการเปลี่ยนข้อความในพื้นที่ก่อนหน้านี้เลือกทางสายตาให้ดู\%V
:h /\%V
ถ้าฉันนำตัวอย่างของคุณ:
function my_function(argument, another argument, but there are spaces)
หากเคอร์เซอร์ของฉันอยู่ในคอลัมน์ที่ 40 และฉันใช้คำสั่งที่ฉันเพิ่งเขียนฉันจะได้รับ:
function my_function(argument, another argument,_but_there_are_spaces)
ในการตอบความคิดเห็นของคุณคุณสามารถใช้
\%#
ซึ่งตรงจากตำแหน่งเคอร์เซอร์
\%>23c
ซึ่งตรงกับหลังคอลัมน์ที่ 23
\%>'m
ซึ่งตรงกับตำแหน่งของเครื่องหมาย
ดู:h /\%#
, และ:h /\%>c
:h /\%>'m
@ User9433424 ให้วิธีการใช้\%#
ในความคิดเห็นของเขา สำหรับรูปแบบที่มีเครื่องหมายคุณสามารถตั้งค่าด้วยปัญญาmaแล้วใช้:
:s/\%>'a /_/g
คำอธิบายของรูปแบบที่กำหนดโดย @ User9433424 มีดังต่อไปนี้:
: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
คุณจะต้องการที่จะเห็น:h \v
และ:h /\@<=
\%#
เพื่ออธิบายตำแหน่งของเคอร์เซอร์ปัจจุบันคุณสามารถใช้อะตอม ดังนั้นคุณสามารถใช้::s/\v(%#.*)@<= /_/g
. ซึ่งสามารถอธิบายได้ว่าเป็นช่องว่างที่นำหน้าด้วย (@<=
) อักขระหลังตำแหน่งเคอร์เซอร์