如何在vim中单词的两边重复添加文本?

| 我在Python脚本中有一堆局部变量引用,但我想从字典中提取。因此,我基本上需要将
foo
bar
等更改为
env[\'foo\']
env[\'bar\']
,依此类推。我是否需要编写一个正则表达式并匹配每个变量名称以进行转换,还是可以使用
.
命令重复一个更直接的方法?     
已邀请:
        您可以使用宏:一次性输入这些命令(使用空格仅用于插入注释)
             \" first move to start of the relevant word (ie via search)
qa           \" record macro into the a register.
ienv[\'<esc>  \" insert relevant piece
ea\']         \" move to end of word and insert relevant piece
q            \" stop recording
然后,当您在下一个单词上时,只需按
@a
重播宏(甚至按
@@
重播此后的最后一个重播)。     
        有一种更简单的方法-您可以使用正则表达式搜索并替换。通过输入冒号进入cmdline模式,然后运行以下命令:
%s/\\\\(foo\\|bar\\|baz\\\\)/env[\'\\1\']/
用实际的变量名称替换
foo
bar
baz
。您可以根据需要添加任意数量的其他变量,只需确保使用反斜杠转义OR管道即可。希望能有所帮助。     
        您可以编写一个可以很好地完成此功能的函数,然后将其添加到您的.vimrc文件中:
function! s:surround()
    let word = expand(\"<cword>\")
    let command = \"%s/\".word.\"/env[\\\'\".word.\"\\\']/g\"
    execute command
endfunction
map cx :call <SID>surround()<CR>
这将包围光标下当前出现的每个单词。 如果要指定每个实例前后的操作,则可以使用以下命令:
function! s:surround()
    let word = expand(\"<cword>\")
    let before = input(\"what should go before? \")
    let after = input(\"what should go after? \")
    let command = \"%s/\".word.\"/\".before.word.after.\"/g\"
    execute command
endfunction
map cx :call <SID>surround()<CR>
如果只想确认变量的每个实例,则可以使用以下方法:
function! s:surround()
    let word = expand(\"<cword>\")
    let before = input(\"what should go before? \")
    let after = input(\"what should go after? \")
    let command = \"%s/\".word.\"/\".before.word.after.\"/c\"
    execute command
endfunction
map cx :call <SID>surround()<CR>
    
        我想出了一种做我所需要的方法。用
q{0-9a-zA-Z\"}
将击键记录到缓冲区中。将光标置于变量名的开头,然后按
cw
并键入
env[\'\']
。接下来,将光标向后移动一个空格到最后一个引号,并用
P
粘贴从buffer16ѭ命令填充的缓冲区。最后,对每个变量用
@{0-9a-z\".=*}
重用录音。     

要回复问题请先登录注册