这个问题在这里已有答案:
我刚开始使用Python,我知道Python需要缩进,不像任何类似的语言。但是当我从其他来源复制并粘贴一段源代码时,代码大部分都是混乱的,我必须一次又一次地为每一行做tab / backspace / home。
我目前的主要设置是带有Python扩展的Visual Studio代码,我使用Emacs主要用于格式化程序,当我需要在Linux上编辑时。 https://www.emacswiki.org/emacs/ReformatBuffer
在过去,我可以使用Visual Studio或Emacs在几秒钟内格式化整个文件。
现在使用Python,你必须手动完成,这是浪费时间。我尝试了几个IDE(Spyder等)和软件包(yapf)。 beind IDE的想法是,它们可以在您键入时帮助您,但不会尝试重新启动所有内容。
例如,Spyder有一个修复缩进功能,但它只修复制表符/空格。 https://github.com/spyder-ide/spyder/issues/5565
虽然yapf仅在代码中没有缩进错误时才有效。
我的想法是,与C / C ++和其他语言不同,Python语句中没有“结束”,所以工具不可能知道当前行是否是块的最后一行?
因为我使用了多种语言,有时我只是将一些语言从一个语言复制到另一个语言并进行一些更改/替换。例如(用IDL语言)
boundary = read_binary(boundary_file, data_type = 4, data_dims = [ncolumn, nrow])
;;==========================================================================================================
nan_index = WHERE( boundary EQ missing_value, nan_count)
good_index = WHERE( boundary NE missing_value, good_count)
IF nan_count EQ 0 THEN BEGIN
RETURN
ENDIF ELSE BEGIN
boundary[ nan_index ] = 0
boundary[ good_index ] = 1
ENDELSE
:do something else
sFilename_rock = 'something'
我希望在更换后复制/粘贴后转换为python:
def test
import numpy as np
sFilename_boundary = 'some_file'
ifs = open(sFilename_boundary, 'rb')
aBoundary = np.fromfile(ifs, '<f4')
aBoundary.shape = (nrow, ncolumn)
ifs.close()
#==========================================================================================================
nan_index = np.where(aBoundary == 1)
nan_count = len(nan_index)
if nan_count == 0 :
pass
else:
boundary[ nan_index ] = 0
boundary[ good_index ] = 1
#something else
sFilename_rock = 'something'
在这种情况下,整个代码结构变得对我不了解,我必须使用yapf逐个手动纠正它们。
请告知解决方案,谢谢。
使用系统剪贴板将Python粘贴到Emacs通常可以正常工作。这听起来像你使用的粘贴方法基本上模拟了Emacs的输入(也许你使用一些原始的VT220类型的终端仿真远程运行Emacs?),这会导致Emacs添加缩进,其中粘贴的代码已经包含它们。
您可以禁用自动缩进(可能粘贴到*scratch*
缓冲区,然后使用Emacs的内部复制/粘贴到您正在使用的Python缓冲区中?)或在本地运行Emacs(如果需要,可以使用Tramp连接到其他系统)编辑远程系统上的文件)。