Sublime 3:选择没有行号的文本(从查找所有结果)

MYG*_*YGz 5 html css sublimetext3

我在项目目录中找到了所有内容,得到了以下结果:

/home/yusuf/Downloads/concept/concept/css/style.css:
  234    position: relative;
  235  }
  236: .scrolled .fh5co-nav {
  237    background: #fff;
  238    padding: 10px 0;
  ...
  241    box-shadow: 0px 5px 7px -7px rgba(0, 0, 0, 0.15);
  242  }
  243: .scrolled .fh5co-nav a {
  244    color: #000;
  245  }
Run Code Online (Sandbox Code Playgroud)

如何选择没有行号的文本?有没有办法在搜索结果中隐藏行号?我想选择代码并将其粘贴到其他地方.

Dan*_*kov 5

最简单的解决方案是打开"查找和替换"(F在OS X上,CtrlH在Windows/Linux上)并输入以下选项(RegEx模式,查找^\s+[0-9]+,替换为空)

Sublime Text截图


Oda*_*urd 4

没有(已记录)选项可以隐藏文件中查找结果中的行号。为了不复制行号,您需要仔细使用多重选择来复制所有行并跳过数字,或者使用查找和替换,如丹尼尔在他的回答中提到的。

然而,通过一些插件代码,您可以让 sublime 为您完成繁重的工作,从而获得两全其美的效果。

例如,Tools > Developer > New Plugin...从菜单中选择并将缓冲区的内容替换为以下 python 代码,然后将其另存为 例如find_results_copy.py. 这需要在你的User包中(名称并不重要,只有扩展名才重要),但是如果你使用菜单条目创建存根插件,Sublime 应该自动处理这个问题。

[编辑] 插件代码修改为使用单个正则表达式操作,(由于深夜大脑放屁)我最初通过两个操作来实现。[/编辑]

import sublime
import sublime_plugin
import re

class FindResultsCopyCommand(sublime_plugin.ApplicationCommand):
    def run(self):
        sublime.active_window ().run_command ("copy")
        sublime.set_clipboard (re.sub (r"^\s*[0-9]+.", "",
            sublime.get_clipboard (), flags=re.MULTILINE))
Run Code Online (Sandbox Code Playgroud)

这实现了一个名为的新命令,find_results_copy该命令首先运行默认copy命令,然后使用正则表达式替换修改剪贴板的内容以丢弃行号。

现在您可以实现自定义键绑定来调用此命令。由于我们只想在查找结果中触发此命令,因此您可以重新使用标准复制键盘快捷键,修改为使用我们的新命令并添加上下文,使其仅在查找结果中生效。

本例使用 Windows/Linux 的键盘命令;如果您使用的是 Mac,super+c请改用映射到该平台的标准键。

{"keys": ["ctrl+c"], "command": "find_results_copy", "context":
    [
        { "key": "selector",
          "operator": "equal",
          "operand": "text.find-in-files",
          "match_all": true
        },
    ]
},
Run Code Online (Sandbox Code Playgroud)

由于这使用默认的复制命令,如果您已copy_with_empty_selection打开,这将复制没有行号的当前行,而无需选择任何内容(如果您习惯于这种方式)。

如果需要,您还可以复制此命令(可以将其存储在同一个文件中)并将类重命名为FindResultsCutCommand并将执行的命令重命名为cut(使用适当的键绑定),以获得剪切文本和删除行号的能力,如果你也需要这类东西。