我得到了一个带有中文代码注释的.py文件。
我的任务是用英语翻译那些评论。
因此,我得到了trans
命令行工具来快速翻译文本。 (对于Google翻译[https://github.com/soimort/translate-shell],这是一个简单的CLI)
并找出与我要翻译的内容完全匹配的正则表达式。
\v([^#]*&[^"']|^)\zs#.+\ze
我可以在vim内使用带有“!”的trans CLI。命令。
(例如.!trans -b :en
翻译我所在的行。
任何人都可以提出命令来翻译所有匹配项吗?
重要:
我只想将比赛本身传递给trans
工具。
如果我给工具加上整行,就像..
some_variable = True #循迹红外传
..该工具无法正确翻译。
预先感谢:)
答案 0 :(得分:1)
有趣的问题!
这是我想出的解决方案:
:%g/\v([^#]*&[^"']|^)\zs#.+\ze/exe"norm!\"acgn\<C-r>=system('trans -b :en <<< \"'.@a.'\"')\<CR>"
您可能需要更改system(...)
部分,因为我不确定您的trans
命令的工作方式...
%g
|这将在找到正则表达式的每一行上执行给定命令\v([^#]*&[^"']|^)\zs#.+\ze
|那就是你的正则表达式!exe"..."
|执行给定的vim命令。我们在这里使用它,以便我们可以在normal
(例如<C-r>
)中输入击键norm!
|模拟击键,就像您自己键入击键一样所以现在我们要像在键盘上键入键一样输入键,并且每次匹配时都会输入键
"a
|将下一个操作的结果存储在寄存器a
cgn
|将剪切下一个匹配的图案(或光标下方的一个),并进入插入模式<C-r>=
|将插入表达式寄存器的内容,换句话说,它将让您输入表达式
system('trans -b :en <<< \"'.@a.'\"')
|系统允许您执行bash命令,然后由您决定放置在那里的内容<CR>
|回车键(回车)您当然可以在vim文档中找到所有这些内容:
:help :global
:help execute
:help normal
:help i_CTRL-R
:help @=
:help system()
答案 1 :(得分:1)
使用@Zorzi解决方案,我想出了另一种方法,也许更简单:
:1s/\v([^#]*&[^"']|^)\zs#.+\ze/\=system('trans -b :en \"'. submatch(0) . '\"')
当然,您可以更改范围以适合您的需求。而且,如果将问题分为两部分,则搜索和替换将更容易理解发生的情况:
/\v([^#]*&[^"']|^)\zs#.+\ze/
:1s//\=system('trans -b :en \"'. submatch(0) . '\"')
注意:submatch(0)
恰好表示我们的正则表达式匹配的内容
我已经测试了另一个不太复杂的版本,没有反斜杠,它似乎可以工作:
:1s//\=system('trans -b :en "'. submatch(0) . '"')
最后,我找到了查找汉字的方法,使我们的搜索更加容易:
/[^\x00-\xff]\+