【问题标题】:Atom/Sublime like Multiple selections in JupyterAtom/Sublime 类似 Jupyter 中的多项选择
【发布时间】:2017-01-09 17:42:40
【问题描述】:

如何通过键盘快捷键在 Jupyter 笔记本中选择匹配的关键字?例如,在 Atom/Sublime 编辑器中,当光标位于“var”上时,我可以在 mac 上点击cmd + D(或在 Windows 上点击Ctrl + d),每次我这样做时,下一个“var”都会突出显示。然后我可以输入新的变量名,'var' 会替换为我输入的任何内容。

var = "hello"
print(var)
print(var)

Jupyter 笔记本中是否有等价物?

【问题讨论】:

  • 我不这么认为,不。虽然 Jupyter 笔记本很容易修补,但由于缺少此类功能(更不用说简单的查找和替换功能!),我发现它们(充其量)用作 IDE/文本编辑器的替代品很烦人。
  • 我认为你是对的 - 不过我确实找到了解决方法。我已经在 J​​upyter 中激活了 VIM 键绑定,并在谷歌上搜索我发现 VIM 已经有办法处理这样的事情:vim.wikia.com/wiki/Search_and_replace
  • CTRL+D 似乎正如您所描述的那样在 Google Colab 中工作(在 Chromebook 上)。另见:stackoverflow.com/questions/63843035/…

标签: jupyter-notebook keymapping


【解决方案1】:

添加custom.js

C:\Users\username\.jupyter\custom      # for Windows and 
~/.jupyter/custom/                     # for Mac 

有内容

require(["codemirror/keymap/sublime", "notebook/js/cell", "base/js/namespace"],
    function(sublime_keymap, cell, IPython) {
        cell.Cell.options_default.cm_config.keyMap = 'sublime';
        cell.Cell.options_default.cm_config.extraKeys["Ctrl-Enter"] = function(cm) {}
        var cells = IPython.notebook.get_cells();
        for(var cl=0; cl< cells.length ; cl++){
            cells[cl].code_mirror.setOption('keyMap', 'sublime');
            cells[cl].code_mirror.setOption("extraKeys", {
                "Ctrl-Enter": function(cm) {}
            });
        }
    } 
);

然后重新启动 jupyter。现在Ctrl+D 应该像在Sublime 中一样工作。

您可以看到Ctrl-Enter 功能被禁用,因为运行当前单元格而不是为大多数用户创建新行会非常方便。您可以通过注释该行来选择拥有该功能。

您可以以类似的方式禁用您不想要的其他关键配置。

【讨论】:

  • ctrl + d 为我删除了该行。关于如何解决这个问题的任何想法?
  • @maxbellec 检查这个链接,找到 custom.js 文件perfectlyrandom.org/2016/03/19/…
  • 如果你已经有一些其他的require 函数,你只是将这个添加到一个新行吗?或者它是如何工作的?
  • 你是如何添加ctrl+alt+向下箭头命令的?它看起来非常有用
  • Ubutnu/ Linux 上,对我来说,在位置-~/.jupyter/ 下,没有找到custom 文件夹。因此,您可能需要创建名为 custom 的文件夹,然后在此文件夹中添加 custom.js 并使用上述给定内容。
【解决方案2】:

最近的(和简单的)方法

目前在 Jupyter Notebook 中实现类似 Sublime 的键盘映射的最佳方式:来自 jupyter-contrib-nbextensionsSelect CodeMirror Keymap。据homepage报道:

jupyter_contrib_nbextensions 包包含一组社区贡献的非官方扩展,这些扩展为 Jupyter 笔记本添加了功能。

我个人使用了这个包中的几个扩展,我发现它们非常有用。 正如安装docs 中所报告的,您只需要运行:

pip install jupyter_contrib_nbextensions

安装扩展程序(或者更好,我建议:

python -m pip install jupyter_contrib_nbextensions

python 指向您在 Jupyter Notebook 中使用的安装的 python 可执行文件)。如果您愿意,也可以使用conda

无论如何,你需要复制一些 JS 和 CSS 的东西以使扩展在 Jupyter Notebook 中工作,你可以通过以下方式实现:

jupyter contrib nbextension install --user

再次假设 jupyter 指向您用于运行笔记本的 jupyter 可执行文件。

此时,您只需启用扩展程序:导航 nbextensions_configurator(这是 jupyter_contrib_nbextensions 包的依赖项),您可以通过 Jupyter Notebook 轻松完成通过浏览Nbextensions 选项卡并选中与Select CodeMirror Keymap相对应的框来控制仪表板(明确地说,是您打开以运行笔记本的页面)。

完成!启动笔记本,点击 Edit>Keymaps>Sublime 即可实现所需的行为。

我知道这是一个相当老的问题,但我在发现 jupyter_contrib_nbextensions(尤其是 Select CodeMirror Keymap 扩展名)之前碰巧遇到了这个问题。因此,我决定发布这个答案,希望能帮助像我这样的其他人,并让他们避免进一步搜索或弄乱自定义的 JS 文件(这可能会吓到某人)。

【讨论】:

  • 干净简单的解决方案。请注意,现在可以通过 Jupyter 笔记本顶部的“编辑”菜单访问 nbextensions 配置。通过 Nbextensions 配置 页面 启用“Select CodeMirror Keymap”后,重新启动 Jupyter 将在编辑下显示 Keymaps 菜单
  • ...需要注意的是,ctrl-enter 行为未得到处理,使用该快捷方式运行单元格也会在光标下方插入换行符
【解决方案3】:

上述解决方案对我有用,但我发现当我按 Enter 时输入“制表符”字符会产生不良影响。这是相关的 GitHub 问题:https://github.com/jupyter/notebook/issues/4769#issuecomment-511935127

根据该帖子,我发现此解决方案提供了正确的 ctrl + d 行为,并保留制表符作为空格。

require(["codemirror/keymap/sublime", "notebook/js/cell", "base/js/namespace"],
    function(sublime_keymap, cell, IPython) {
        // setTimeout(function(){ // uncomment line to fake race-condition
        cell.Cell.options_default.cm_config.keyMap = 'sublime';
        var cells = IPython.notebook.get_cells();
        for(var c=0; c< cells.length ; c++){
            cells[c].code_mirror.setOption('keyMap', 'sublime');
        }
        // }, 1000)// uncomment  line to fake race condition 
    } 
);

【讨论】:

    【解决方案4】:

    现在在 jupyter lab 中,您可以通过搜索 sublime 来添加扩展

    点击安装并重建jupyter。 **注意:当你点击安装查看终端控制台时,会显示构建结果

    【讨论】:

    • 不错,但受限于一个单元格范围
    【解决方案5】:

    Jupyter Lab 中,现在可以在 Settings > Text Editor Key Map > Sublime Text 中进行设置.

    【讨论】:

      【解决方案6】:

      使这项工作对我有用的唯一解决方案是

      pip install jupyterlab_sublime
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-10
        • 2018-11-14
        • 2020-08-01
        • 1970-01-01
        • 2012-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多