微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VIM搜索和替换

我正在做一些拼图,其中每个英文字符被2个字符高级替换.例如,“apple”将被写为“crrng”a 2 = c,…并且类似于pple.在 python maketrans我能够做到.

我想知道在VIM搜索中是否有类似的东西是可能的.更换??

有任何想法吗???

如果字母字符按顺序排列在目标中
encoding1,使用以下替换命令2.
:%s/./\=nr2char(char2nr(submatch(0))+2)/g

但是,这种替换实现了非圆形的字母移位.一个圆形
shift可以通过分别处理小写的两个替换来实现
和大写字母.

:%s/\l/\=nr2char(char2nr('a') + (char2nr(submatch(0)) - char2nr('a') + 2) % 26)/g
:%s/\u/\=nr2char(char2nr('A') + (char2nr(submatch(0)) - char2nr('A') + 2) % 26)/g

另一种方法是使用tr()函数翻译字符.让我们
假设变量a包含字母表的小写字符
按正确的顺序排列,变量a1保存字符串
对应于a中的那些(下面是英文字母的例子).

:let a = 'abcdefghijklmnopqrstuvwxyz'
:let a1 = a[2:] . a[:1]

为避免手工输入整个字母,可以生成a的值
如下,

:let a = join(map(range(char2nr('a'),char2nr('z')),'nr2char(v:val)'),'')

然后,用一个字母替换一行中的每个字母
字母表,使用替换

:%s/.*/\=tr(submatch(0),a . toupper(a),a1 . toupper(a1))

1对于ASCII和UTF-8中的一些字母表,例如,英语.

2在运行命令之前,请确保编码选项相应地设定.

原文地址:https://www.jb51.cc/vim/383649.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐