gpt4 book ai didi

vim - 在 Vim 中交换两个字符串的最简单方法是什么?

转载 作者:行者123 更新时间:2023-12-03 07:41:02 31 4
gpt4 key购买 nike

string_b 替换所有出现的 string_a 的最简单方法是什么,同时将任何已经是 string_b 的内容更改为 字符串_a?我目前的方法如下:

:s/string_a/string_c/g  
:s/string_b/string_a/g
:s/string_c/string_b/g

尽管这可行,但它需要额外的输入并且似乎效率低下。有人知道更好的方法吗?

最佳答案

我会这样做:

:%s/\v(foo|bar)/\={'foo':'bar','bar':'foo'}[submatch(0)]/g

但是打字太多了,所以我会这样做:

function! Mirror(dict)
for [key, value] in items(a:dict)
let a:dict[value] = key
endfor
return a:dict
endfunction

function! S(number)
return submatch(a:number)
endfunction

:%s/\v(foo|bar)/\=Mirror({'foo':'bar'})[S(0)]/g

但这仍然需要输入 foobar 两次,所以我会这样做:

function! SwapWords(dict, ...)
let words = keys(a:dict) + values(a:dict)
let words = map(words, 'escape(v:val, "|")')
if(a:0 == 1)
let delimiter = a:1
else
let delimiter = '/'
endif
let pattern = '\v(' . join(words, '|') . ')'
exe '%s' . delimiter . pattern . delimiter
\ . '\=' . string(Mirror(a:dict)) . '[S(0)]'
\ . delimiter . 'g'
endfunction

:call SwapWords({'foo':'bar'})

如果您的某个单词包含 /,则必须传入一个您知道您的单词都不包含的分隔符,例如

:call SwapWords({'foo/bar':'foo/baz'}, '@')

这还有一个好处是能够一次交换多对单词。

:call SwapWords({'foo':'bar', 'baz':'quux'})

关于vim - 在 Vim 中交换两个字符串的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3578549/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com