在将代码从sublime复制到jupyter noteb时,identification转换成了诡异的箭头

2024-09-29 06:25:17 发布

您现在位置:Python中文网/ 问答频道 /正文

从sublime复制这段代码:

# Texts Texts Texts Texts Texts Texts 
for i in range(10):
    #Idented Texxt
    print i

结果如下,在jupyter笔记本中有line标签。现在如果我想添加代码并在jupyter中做进一步的测试,我需要复制这个奇怪的箭头,而不是点击tab(否则,它显示缩进错误)。有什么简单的方法可以改变吗?我可以想象我错过了一些非常简单的事情,这可能根本不是问题。我试着找了看,但没有发现这件事。我可以在sublime中将所有缩进改为空格,这可能在复制时起作用,但我更喜欢使用制表符,以使代码可读。在

enter image description here

第二张图片有两个标签,在笔记本中看起来如何。在

enter image description here


Tags: 代码inforline笔记本jupyterrange标签
2条回答

将脚本从sublime复制到Jupyter cells后:

  1. 选择所有带箭头的行
  2. 制表符-这将删除箭头并在每行的开头添加一个制表符
  3. Shift+Tab-这将删除上述步骤中添加的所有选项卡

这看起来是因为工具的世界观(在本例中是Sublime和Jupyter)在标签页和空间方面的不匹配,这是一个长期存在的争议。在

特别是在Sublime中,您关闭了translate_tabs_to_spaces,因为您想使用物理制表符字符。因此,在Sublime中按Tab将插入物理制表符,这些字符通过tab_size设置可视化。在

另一方面,根据这个问题,Jupyter does not support indentation via tabs当您按下选项卡键时。在Jupyter中,尽管您的意图很好,但当您按Tab键时,它将插入空格。但是,如果物理标签被粘贴进来,它确实支持这些标签,这就是为什么它会出现在上面,以及为什么你必须手动粘贴物理标签来获得你需要的输入。在

在这两个工具中,Sublime允许您选择使用物理制表符还是空格字符,但Jupyter不使用,而且总是需要空格。在这种情况下,最方便的解决方案是也不要在Sublime中使用制表符,然后一切都会匹配起来。在

大概这不是你的选择,所以下一个最好的解决方案就是让Sublime以它期望的方式向Jupyter提供数据,这可以通过一个简单的插件来实现。在

在Sublime中,选择Tools > Developer > New Plugin...并将存根替换为以下代码,然后将其保存在Sublime将提示您的默认位置(您的User软件包),并使用一个可识别的名称,如copy_with_spaces.py

import sublime
import sublime_plugin


class CopyWithSpacesCommand(sublime_plugin.TextCommand):
    """
    Copy the selected text to the clipboard, replacing all tab characters with
    spaces based on the tab size in the current view.
    """
    def run(self, edit):
        self.view.run_command("copy")

        tab_size = self.view.settings().get("tab_size", 4)      
        text = sublime.get_clipboard().expandtabs(tab_size)
        sublime.set_clipboard(text)

这实现了一个新的命令copy_with_spaces,它将执行一个复制,但在传递过程中会修改数据,以便将任何物理制表符替换为适当数量的空白字符。在

有了它,您就可以添加一个自定义键绑定,以便在将代码从Sublime复制到Jupyter时使用,以简化工作。例如:

^{pr2}$

相关问题 更多 >