Vim相当于"tr"命令

kob*_*ame 6 vim

有这样的线:

xxAyayyBwedCdweDmdwCkDwedBAwe
;;;; cleaner example
__A__B__C__D__C_D_BA_
Run Code Online (Sandbox Code Playgroud)

想要替换ABCDPQRT例如得到

__P__Q__R__T__R_T_QP_
Run Code Online (Sandbox Code Playgroud)

例如,下一个bash或perl的等价 tr

tr '[ABCD]' '[PQRT]' <<<"$string"
Run Code Online (Sandbox Code Playgroud)

如何在"vim"中执行此操作?(VIM - Vi IMproved 7.4(2013年8月10日,2014年5月9日编译12:12:40))

Luc*_*tte 9

您可以tr()结合使用该功能:global

:g/./call setline(line('.'), tr(getline('.'), 'ABCD', 'PQRS'))
Run Code Online (Sandbox Code Playgroud)

很容易使它适应:%Tr#ABCD#PQRS命令.

:command! -nargs=1 -range=1 Translate <line1>,<line2>call s:Translate(<f-args>)

function! s:Translate(repl_arg) range abort
  let sep = a:repl_arg[0]
  let fields = split(a:repl_arg, sep)
  " build the action to execute
  let cmd = a:firstline . ',' . a:lastline . 'g'.sep.'.'.sep
        \. 'call setline(".", tr(getline("."), '.string(fields[0]).','.string(fields[1]).'))'
  " echom cmd
  " and run it
  exe cmd
endfunction
Run Code Online (Sandbox Code Playgroud)

  • Vimgolf:'%s /.*/\= tr(submatch(0),'ABCD','PQRS')` (7认同)
  • Golfier(假定光标位于第一列):`C <Cr> = tr(@",'ABCD','PQRS')<CR> <Esc>` (2认同)