Sublimetext2 脚本查找&;替换升华文本中的操作

Sublimetext2 脚本查找&;替换升华文本中的操作,sublimetext2,Sublimetext2,我经常发现自己在文件中重复执行文件和替换操作。最常见的情况是修复查找和替换操作;删除一些行,更改一些始终相同的字符串,等等 在Vim中,这是一个无需思考的问题 function! Modify_Strength_Files() execute':%s/?/-/' execute':%s/Ä/-/' "-------------------------------------------------------- execute':%s/Ä/-/' exec

我经常发现自己在文件中重复执行文件和替换操作。最常见的情况是修复查找和替换操作;删除一些行,更改一些始终相同的字符串,等等

在Vim中,这是一个无需思考的问题

function! Modify_Strength_Files()
    execute':%s/?/-/'
    execute':%s/Ä/-/'
    "--------------------------------------------------------
    execute':%s/Ä/-/'
    execute':%s///g'
    "--------------------------------------------------------
    execute':g/Version\ of\ Light\ Ship/d'
    execute':g/Version\ of\ Data\ for\ Specific\ Regulations/d'
    "--------------------------------------------------------
    " execute':g/LOADING\ CONDITION/d'
    " execute':g/REGULATION:\ A\.562\ IMO\ Resolution/d'

    " This is to reduce multiple blank lines into one.
    execute ':%s/\s\+$//e'
    execute ':%s/\n\{3,}/\r\r/e'
    " ---------------------
endfunction
逐字复制


如果可以在Sublime文本编辑器中定义这样的函数,然后调用它对当前打开的文件执行操作,那么如何在Sublime文本编辑器中定义这样的函数呢?

以下是编写Sublime文本2插件的参考资料:

  • 示例:您可以编写一个类似的插件并将热键绑定到它,即,
    batch\u edit
    命令。然后,您可以打开一个文件并通过该热键执行命令。顺便说一下,在这个脚本中,我没有考虑文件编码。您可以通过
    self.view.encoding()
    获取文件编码


    你能试着录一个宏吗?@lhuang-那有什么帮助吗?@Idigas我的错。宏似乎无法正确记录replace命令。也许你必须写一个插件才能做到这一点。@lhuang-嗯,我正试图写一些东西来做到这一点。由于ST没有与Vim类似的脚本功能,我假设我必须深入研究python,在那里编写一个函数,并以某种方式将其“连接”到当前打开的文件。关于如何做到这一点的帮助是我为什么要问这个问题。
    #-*-编码:utf-8-*-
    看起来像是一个注释。
    # -*- coding: utf-8 -*-
    
    import sublime, sublime_plugin
    
    import re
    
    class BatchEditCommand(sublime_plugin.TextCommand):
        def run(self, edit):
            self._edit = edit
            self._replace_all(r"\?", "-")
            self._replace_all(u"Ä", "-")
            self._delete_line_with(r"Version of Light Ship")
            self._delete_line_with(r"Version of Data for Specific Regulations")
            self._replace_all(r"(\n\s*\n)+", "\n\n")
    
        def _get_file_content(self):
            return self.view.substr(sublime.Region(0, self.view.size()))
    
        def _update_file(self, doc):
            self.view.replace(self._edit, sublime.Region(0, self.view.size()), doc)
    
        def _replace_all(self, regex, replacement):
            doc = self._get_file_content()
            p = re.compile(regex, re.UNICODE)
            doc = re.sub(p, replacement, doc)
            self._update_file(doc)
    
        def _delete_line_with(self, regex):
            doc = self._get_file_content()
            lines = doc.splitlines()
            result = []
            for line in lines:
                if re.search(regex, line, re.UNICODE):
                    continue
                result.append(line)
            line_ending = {
                "Windows" : "\r\n",
                "Unix"    : "\n",
                "CR"      : "\r"
            }[self.view.line_endings()]
            doc = line_ending.join(result)
            self._update_file(doc)