在 Sublime Text 中编写查找和替换操作脚本

2024-01-09

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

在 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 Text 编辑器中定义这样的函数,然后调用它来对当前打开的文件进行操作?


以下是编写 Sublime Text 2 插件的资源:

  1. Sublime Text 2 API 参考 http://www.sublimetext.com/docs/2/api_reference.html
  2. Sublime Text 2 插件示例 http://www.sublimetext.com/docs/plugin-examples
  3. 如何运行 Sublime Text 2 命令 https://stackoverflow.com/questions/19532204/in-sublime-why-is-def-run-working-in-one-case-and-not-another-case-and-how-can/19533899#19533899
  4. 设置 Sublime Text 2 自定义键盘快捷键 https://superuser.com/questions/492021/setting-up-sublime-text-2-custom-keyboard-shortcuts

例子:你可以写一个类似的插件,并给它绑定一个热键,即batch_edit命令。然后您可以打开文件并通过该热键执行命令。顺便说一句,在这个脚本中,我没有考虑文件编码。您可以通过以下方式获取文件编码self.view.encoding().

# -*- 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Sublime Text 中编写查找和替换操作脚本 的相关文章

随机推荐

  • 如何在 R 中将多列转换为单独的行

    我在 R 中有一个数据帧 其中有许多行 超过 3000 行 其中包含 F0 基本频率 轨迹轨迹 这些行包含以下信息 说话者 ID 组号 重复次数 口音类型 性别 以及 50 列 F0 点 数据如下 Speaker Sex Group Rep
  • 3D 空间(模型/世界、视图/眼睛、投影)

    这不是一个问题 但我对 3D 空间对应什么感到非常困惑 我习惯于听到模型 视图 投影空间 但在我的工作中他们使用世界 眼睛 投影 我没有意识到世界和眼睛是模型和视图的同义词 因此如果有人对此有任何困惑 我发现以下说明可以帮助您 希望它会对您
  • 数据框将整列从数字类型转换为字符

    假设我有一个data frame这完全是numeric 如果我在第一列中输入一个character 例如 那么整个第一列将变成character Question 怎样才能扭转这个局面呢 也就是说 我怎样才能使任何character里面的物
  • 如何在php中使用curl将上传文件发送到其他网站?

    如何使用 PHP 中的 Curl 将文件上传到另一个网站并获取响应页面 网站 http www postto me http www postto me
  • 如何录制 iPhone 的音频输出? (就像我的应用程序的声音)

    我想录制我的 iPhone 应用程序的声音 就像有人在 iPhone 乐器上演奏一样 之后你就可以听到它的声音 没有微博可以吗 你的意思是你自己构建的应用程序吗 如果是 您可以保存渲染的波形 可能经过编码 压缩以节省空间 以供以后播放 看
  • python 装饰器中的 self

    我想要一个装饰器将装饰函数添加到列表中 如下所示 class My Class object def init self self list decorator def my function self print Hi 我希望将 my f
  • 使用 Jackson JSON 处理器而不使用注释

    我有一个包 其中仅包含 xsd 文件来生成 通过 JAXB 与我们的服务器和客户端应用程序相关的共享类 所以这些类包含 XML 注释 一个客户端是 Android 应用程序 我还想在此处使用这些类进行 JSON 反序列化 因为我与提供 JS
  • 如何为 UML 序列图上的每个循环建立 Java 模型?

    for Item i collection i foo 在一些抽象序列图中 你有一个loop组合片段与 条件 例如 对于每个项目 以 Java 实现为特色的序列图 你会用什么作为循环保护 如果所有生命线都必须代表一个对象实例 您将如何表明i
  • $routeProvider 和 $stateProvider 有什么区别?

    请解释一下之间的区别 routeProvider and stateProvider在 AngularJS 中 哪个是最佳实践 两者的工作原理相同 因为它们在 SPA 单页应用程序 中用于路由目的 1 Angular 路由 每 routeP
  • 如何从 JQUERY 移动列表视图中删除元素

    有一个列表视图 它在加载页面时动态加载 这会在列表视图中添加元素 问题是我放置了后退按钮 在转到上一个屏幕并返回到当前屏幕后 它正在加载数据并附加到列表视图 I need to remove the li elements from the
  • PHP 将数组提取到变量中

    我有以下输出我试图将各个值放入单独的变量中 output Array 0 gt Array 0 gt 8711 1 gt 200 2 gt 755 3 gt 1800 4 gt 01 5 gt 675 6 gt 8910 我尝试过以下代码但
  • 无法将变量添加到以下划线开头的表中(Laravel)

    我无法向 MySQL 添加值 因为行名称以 开头 SQLSTATE HY000 一般错误 1364 字段 user id 没有 默认值 我无法更改 SQL 表首选项 因为我们正在使用旧数据库编写新项目 attributes request
  • 在sql server中将列转换为行及其各自的数据

    我有一个场景 我需要将表的列转换为行 例如 表 库存 ScripName ScripCode Price 20 MICRONS 533022 39 我需要用以下格式表示表格 但我只需要这种单行表示 ColName ColValue Scri
  • 寻找 RSS 应用程序的 Google Reader 同步替代方案

    我正处于设计 RSS 应用程序的早期阶段 我希望将同步到在线 RSS 提要服务作为一项功能 大多数此类应用程序都利用 Google Reader 的提要 同步功能 但 Google 现在正在将同步功能从 Reader 服务中移出 而且其 A
  • React:访问React内部操作队列

    React 收集操作 https reactjs org docs implementation notes html updating host components 就像 ADD REPLACE REMOVE 等 DOM 操作一样 这样
  • 如何使用最新的 Facebook sdk 从 iOS 中的 Facebook API 获取用户的生日?

    如何使用最新的 Facebook sdk 从 iOS 中的 Facebook API 获取用户的生日 我尝试去获取它 fields id name link first name last name picture type large e
  • 如何从 Java 代码更新 Jenkins config.xml?

    我是 Jenkins 插件开发的新手 所以如果问题很愚蠢 请原谅我 我目前正在开发一个 Jenkins 插件 它提供了一个非常小的配置选项列表 如所附屏幕截图所示 该表单是使用 Jelly 脚本设计的 我必须从我的 Java 代码更新作业的
  • Tensorflow 中的 zip 之类的函数? Tensorflow张量运算

    我的问题是关于 Tensorflow 中的张量运算 比方说 import tensorflow as tf import numpy as np a tf Variable np random random 10 3 3 b tf Vari
  • Javascript d3:有没有办法以编程方式停止拖动项目?

    当我单击并拖动项目时 有没有办法在不松开鼠标按钮的情况下强制使其停止可拖动 例如 如果我将一个项目拖过某个边界框 我可以让它放开所拖动的项目吗 jsfiddle 示例 http jsfiddle net typeofgraphic Ne8h
  • 在 Sublime Text 中编写查找和替换操作脚本

    我经常发现自己在文件中执行重复的文件和替换操作 最常见的是fixed查找和替换操作 删除一些行 更改一些始终相同的字符串等等 在 Vim 中这是理所当然的 function Modify Strength Files execute s e