使用Org–Babel编写识字Python时,我需要能够控制缩进级别(显式地使用:indentation-level 3
或隐式地使用一些聪明的指示)。
这是一个演示此问题的示例文件。
#+BEGIN_SRC python :tangle "sample.py"
class Test:
def __init__(self):
self.a = 'a test class'
#+END_SRC
#+BEGIN_SRC python :tangle "sample.py"
def say_hi(self):
print 'Hi from this Test object!'
print 'ID: {}'.format(repr(self))
print 'Data: {}'.format(str(self.__dict__))
#+END_SRC
答案 0 :(得分:7)
将org-src-preserve-indentation
设为t
。
答案 1 :(得分:1)
我并不像Tobias' answer那样完美,因为当我org-edit-special
(C-c '
)代码块时,我的python-mode缓冲区会对我大喊大叫(我有几个python minor)具有语法检查器的模式)由于具有独立方法的块的意外缩进(因为设置了org-src-preserve-indentation
,我将在各个块中的所有方法前面进行缩进)。所以相反,我喜欢使用org-mode' :noweb标头参数的解决方案:
#+BEGIN_SRC python :tangle "sample.py" :noweb yes
class Test:
<<init_method>> # these are indented
<<more_methods>> # these are indented
#+END_SRC
#+BEGIN_SRC python :noweb-ref init_method
def __init__(self):
self.a = 'a test class'
#+END_SRC
#+BEGIN_SRC python :noweb-ref more_methods
def say_hi(self):
print 'Hi from this Test object!'
print 'ID: {}'.format(repr(self))
print 'Data: {}'.format(str(self.__dict__))
#+END_SRC
只要您在类定义中缩进Noweb语法引用(double << >>
),其他块(&#34; init_method&#34;和&#34; more_methods&#34;)将与你的缩进纠缠在一起。那么,最终输出&#34; sample.py&#34;文件看起来像这样:
class Test:
def __init__(self):
self.a = 'a test class'
def say_hi(self):
print 'Hi from this Test object!'
print 'ID: {}'.format(repr(self))
print 'Data: {}'.format(str(self.__dict__))
尼斯!
答案 2 :(得分:0)
我知道这不是理想的解决方案,但作为解决方法,您可以在源块中插入注释(特定于您的编程语言),并在该注释后进行所需的缩进。这也将在退出edit-buffer
#+BEGIN_SRC python :tangle "sample.py"
class Test:
def __init__(self):
self.a = 'a test class'
#+END_SRC
#+BEGIN_SRC python :tangle "sample.py"
# This is my dummy python comment to keep the correct indentation
def say_hi(self):
print 'Hi from this Test object!'
print 'ID: {}'.format(repr(self))
print 'Data: {}'.format(str(self.__dict__))
#+END_SRC