【问题标题】:How do I search and replace multiple items on a single line?如何在一行中搜索和替换多个项目?
【发布时间】:2012-06-28 17:12:42
【问题描述】:

我有这样一行:

contact.psu_code = row[:psu_code] unless row[:psu_code].blank?

我想将psu_code 替换为contact_disposition,例如:

contact.contact_dispositon = row[:contact_disposition] unless row[:contact_disposition].blank?

它只替换我所在的单行,没有确认。我知道%s/orig/sub,但它很麻烦。

【问题讨论】:

    标签: ruby vim text replace


    【解决方案1】:

    你的意思是,它很麻烦?如果你想在一行上进行搜索和替换,你不需要使用%

    :s/psu_code/contact_disposition/g
    

    如果没有g,Vim 将在替换一次后停止。通过指定g,对整行进行替换。

    如果要确认,请在g 后面的选项中添加c

    这是一个方便的函数:

    function! LineReplace()
        let search = expand('<cword>')
        call inputsave()
        let replacement = input('')
        call inputrestore()
        call setline(line('.'), substitute(getline('.'), search, replacement, 'g'))
    endfunction
    
    nnoremap <leader>r :call LineReplace()<CR>
    

    我将其映射到 &lt;leader&gt;r,但您可以轻松地将其更改为您想要的任何键盘映射。

    【讨论】:

    • 繁琐可能是一个不好的词选择。我真正想要的是一种将光标放在一个单词上的方法,发出一个命令,我只需键入替换然后 bam!该行被替换
    • @steve_gallagher:好的,这很容易。我为此编写了一个非常简单的便捷函数,请参阅编辑。
    • 谢谢,这个功能非常酷,而且超越了。 Vim 已成为我生活的 70%,非常感谢。
    【解决方案2】:

    试试

    %s/orig/sub/gc
    

    g => 全局,表示一行多次

    c => 确认

    【讨论】:

      【解决方案3】:

      有两种方法可以做到这一点:

      1. 在正常模式下:s/psu_code/contact_disposition/gc。最后一个c是用来确认的,可以用也可以不用。
      2. 在可视模式下:Shift-V 选择行然后:s/psu_code/contact_disposition/g

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2018-07-03
        • 1970-01-01
        • 2022-11-28
        • 1970-01-01
        • 2018-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-05
        相关资源
        最近更新 更多