[英]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單元格后:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.