python indent-region后改变了源代码的结构

python indent-region后改缩进不对了,如源格式:

async def close(self):
    if True:
        logger.info('server closed')
    self.session.close()

indent-region后:

async def close(self):
    if True:
        logger.info('server closed')
        self.session.close()

self.seeion.close()缩进到if里面了。不知道怎么解决!请大家帮忙

Python这种语法结构的抛弃了分割符,而采用"行特征"来决定"程序块"的做法其实是很有问题的.

1.这种做法和文件流的概念是格格不入的,如果要把这种结构的文件作为一个流来处理是很麻烦的一件事情.

2.空格以及缩进符对于目前无处不在的html来说是不存在的字符,也就是说,在代码交流过程中非常容易丢失空格和缩进信息,这意味着程序块信息就丢失了.而且无法恢复.

indent-buffer 只是简单地format 了一下buffer, 并没有对 buffer 的内容进行语义分析, 推荐你用 py-autopep8 这个package 来format buffer. By the way, 楼主问的是怎么处理indent-buffer 缩进的问题,楼上就趁机批判了一波python :zipper_mouth_face:

关键现在是代码拷贝也会出现这种问题

我用你的代码试了试,我的ident-region没有问题。

你代码拷贝是从哪复制的?如果从网页上复制很大几率会出问题,但是编辑器内拷贝不应该有问题的啊。

感觉yapf更方便,改得更多

我也用了yapf,但是它管不到这块。我用的是spacemacs的python layer.之前没有问题,最近参考别人的整个配置改了下,同时升级了。就出这个问题。

也是从编辑器拷贝过来的