簡體   English   中英

在將代碼從sublime復制到jupyter筆記本時,識別會轉換為奇怪的箭頭

[英]Identation coverts to weird arrow while copying code from sublime to jupyter notebook

從sublime復制這段代碼:

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

結果如下,jupyter-notebook中的行選項卡。 現在,如果我想添加代碼並在jupyter中進行進一步測試,我需要復制這個奇怪的箭頭而不是點擊標簽(否則,它顯示縮進錯誤)。 有一些簡單的改變方法嗎? 我可以想象我錯過了一些非常簡單的東西,這根本不是問題。 我試過看,但沒有提到這一點。 我可以在sublime中將所有縮進更改為空格,這可能在復制時有效,但我更喜歡使用制表符,以使代碼可讀。

在此輸入圖像描述

帶有雙標簽的第二張圖片,它在筆記本中的樣子。

在此輸入圖像描述

看起來這種情況發生在你身上的原因是由於工具的世界觀(即本案例中的Sublime和Jupyter)在制表符與空格方面的不匹配,確實存在長期爭議。

特別是在Sublime中,您關閉了translate_tabs_to_spaces ,因為您希望使用物理制表符。 因此,在Sublime中按Tab鍵將插入通過tab_size設置可視化的物理制表符。

另一方面,根據此問題,當您按Tab鍵時, Jupyter不支持通過選項卡縮進 盡管你最好的意圖是在Jupyter中,當你按Tab鍵時它會插入空格。 但它確實支持物理標簽,如果它們被粘貼,這就是為什么它出現在上面的方式以及為什么你必須手動粘貼物理標簽以獲得所需的輸入。

在這兩個工具中,Sublime允許您選擇使用物理標簽還是空格字符,但Jupyter不會並且總是想要空格。 在這種情況下最方便的解決方案是不使用Sublime中的選項卡,然后一切都匹配。

據推測,這不是你的選擇,所以下一個最好的解決方案是通過讓Sublime以一種預期的方式向Jupyter提供數據來彌補差距,這可以通過一個簡單的插件實現。

在Sublime中,選擇Tools > Developer > New Plugin...並用此代碼替換存根,然后保存在Sublime將使用可識別名稱(例如copy_with_spaces.py )提示您(您的User包)的默認位置:

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時簡化使用。 一個例子可能是:

{
    "keys": ["shift+ctrl+c"],
    "command": "copy_with_spaces",
}

將腳本從sublime復制到Jupyter單元格后:

  1. 選擇帶箭頭的所有線條
  2. Tab鍵 - 這將刪除箭頭並在每行的開頭添加一個選項卡
  3. Shift + Tab - 這將刪除上述步驟中添加的所有選項卡

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM