Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 有没有一种快速的方法可以在PyDev中将gettext()调用添加到字符串中?_Eclipse_Pydev_Gettext - Fatal编程技术网

Eclipse 有没有一种快速的方法可以在PyDev中将gettext()调用添加到字符串中?

Eclipse 有没有一种快速的方法可以在PyDev中将gettext()调用添加到字符串中?,eclipse,pydev,gettext,Eclipse,Pydev,Gettext,在Eclipse下运行的PyDev编辑器中,是否有一种快速方法可以向文本字符串添加gettext()调用?也就是说,当我将光标放在Python文件中的任何文本'string'上时,我想用一次按键将其转换为\('string')。我可以使用宏或类似的东西来添加这样的函数吗?在PyDev中使用一些简单的Python脚本应该可以做到这一点 看看:(你可以用它作为例子) 对于文本选择,PySelection实现可以在以下位置找到:(因此,您可以看到如何使用getSelectedText和您自己的版本来获

在Eclipse下运行的PyDev编辑器中,是否有一种快速方法可以向文本字符串添加
gettext()
调用?也就是说,当我将光标放在Python文件中的任何文本
'string'
上时,我想用一次按键将其转换为
\('string')
。我可以使用宏或类似的东西来添加这样的函数吗?

在PyDev中使用一些简单的Python脚本应该可以做到这一点

看看:(你可以用它作为例子)


对于文本选择,PySelection实现可以在以下位置找到:(因此,您可以看到如何使用getSelectedText和您自己的版本来获得所需的文本)。

下面是一个小PyDev脚本,我可以使用Fabio提供的提示创建它。如果按Ctrl+2,t,则光标位置的文本字符串将被一个gettext调用包围。我不确定我是否按照预期使用了JavaAPI,但它对我来说是有效的。如果您有改进意见,请发表评论

if cmd == 'onCreateActions':
    from org.eclipse.jface.action import Action
    from org.python.pydev.core import IPythonPartitions
    from org.python.pydev.core.docutils import ParsingUtils, PySelection

    class AddGettext(Action):
        """Add gettext call around literal string at cursor position."""

        GETTEXT = '_'

        def run(self):
            sel = PySelection(editor)
            doc = sel.getDoc()
            pos = sel.getAbsoluteCursorOffset()
            ctype = ParsingUtils.getContentType(doc, pos)
            if ctype == IPythonPartitions.PY_SINGLELINE_STRING1:
                char, multi = "'", False
            elif ctype == IPythonPartitions.PY_SINGLELINE_STRING2:
                char, multi = '"', False
            elif ctype == IPythonPartitions.PY_MULTILINE_STRING1:
                char, multi = "'", True
            elif ctype == IPythonPartitions.PY_MULTILINE_STRING2:
                char, multi = '"', True
            else:
                char = None
            if char:
                par = ParsingUtils.create(doc)
                if multi:
                    start = par.findPreviousMulti(pos, char)
                    end = par.findNextMulti(pos, char)
                else:
                    start = par.findPreviousSingle(pos, char)
                    end = par.findNextSingle(pos, char)
                doc.replace(end + 1, 0, ')')
                doc.replace(start, 0, self.GETTEXT + '(')

    ACTIVATION_STRING = 't'
    WAIT_FOR_ENTER = False

    editor.addOfflineActionListener(
        ACTIVATION_STRING, AddGettext(), 'Add gettext call', WAIT_FOR_ENTER)

下面是另一个解决方案,使用:

:地图gt ca''UPA)

请注意,这只适用于单引号字符串,当您使用双引号或多行字符串时,它无法识别。

谢谢,我将尝试一下PyDev脚本。您参考的教程建议为此创建Jython项目。这是否意味着我需要先安装Jython?我以前没有使用过Jython和PyDev脚本。您不需要安装Jython(脚本将始终使用内部Jython,因此,您不需要使用Jython——您可以使用常规Python项目)。好的,明白了。我将努力学习你所学的例子。事实上这很复杂,所以我将推迟到本周晚些时候,看看我能走多远。据我所知,这个例子实际上涉及三个脚本:
assign_params_to_attributes_action
assign_params_to_attributes_assist
pyedit_assign_params_to_attributes
,后者将操作绑定到Ctrl+1(“附加辅助”)和Ctrl+2(“脱机操作”)。通过将
WAIT_FOR_ENTER
设置为
False
,我可以使用组合键“Ctrl+2 g”触发该操作。对此我感到抱歉(似乎我复制了错误的链接,该链接非常复杂,不是我想要复制的链接),因此,只需进行编辑,即可为您提供我之前打算提供的链接(应该很简单)。好的,谢谢,我想我现在理解了PyDev脚本,并且能够用这些指针创建一个解决方案(我已经发布了我的脚本作为额外的答案)。
  :map gt ca'_(<esc>pa)<esc>