如何在一行中搜索和替换多个项目?

时间:2012-06-28 17:12:43

标签: ruby vim text replace

我有一句话:

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,但这很麻烦。

3 个答案:

答案 0 :(得分:5)

你是什么意思,这很麻烦?如果您想在一行上进行搜索和替换,则无需使用%

:s/psu_code/contact_disposition/g

如果没有g,Vim会在替换单个事件后停止。通过指定g,替换将在整行上完成。

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

这是一个方便的功能:

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>

我将其映射到<leader>r,但您可以轻松将其更改为您想要的任何键映射。

答案 1 :(得分:0)

尝试

%s/orig/sub/gc

g =&gt;全局,意味着一行多次

c =&gt;确认

答案 2 :(得分:0)

有两种方法可以完成这项工作:

  1. 在正常模式下:s/psu_code/contact_disposition/gc。最后一个c用于确认,您可以使用与否。
  2. 在可视模式下:Shift-V选择该行,然后选择:s/psu_code/contact_disposition/g
  3. 我希望这会有所帮助