如何在`org-mode`的`src-block`中保持其`head`部分不换行

我的fill-column设置为80

(setq-default fill-column 80)

但是这样一来,org-mode中的代码块的头部声明也被强行换行了,如图:

由于:result 声明被换行了,所以在执行脚本时无法直接输出执行结果。

请问如何在设定fill-column的情况下,保证src-head 部分不换行,如下:

#+BEGIN_SRC python :session :python /Users/tilabs/.conda/envs/tensorflow/bin/python :exports both :results output

我能想到的一种解决办法是用 visual-line 模式。另外还可以手动把header 分成较短的几行,用下列:

#+header: :session ...

M-q (org-fill-paragraph) 是正常的吧?

M-q正常,但是BEGIN_SRC部分还是被换行

#+BEGIN_SRC python
#+HEADER: :session
#+HEADER: :python /Users/tilabs/.conda/envs/tensorflow/bin/python
#+HEADER: :exports both
#+HEADER: :results output

print('hello,you')
import os
import sys
import json
import tensorflow as tf
#+END_SRC

#+RESULTS:

错误提示为:

ModuleNotFoundError: No module named 'tensorflow'

好像#+HEADER: :python /Users/tilabs/.conda/envs/tensorflow/bin/python这部分声明没有起作用。

此外,即便没有指定python解析器,也无法输出内容,如下:


#+BEGIN_SRC python
#+HEADER: :exports both
#+HEADER: :results output

print('hello,world')
#+END_SRC

#+RESULTS:
: None

被什么强行换行了?

看不明白什么意思?你的意思是 M-q (org-fill-paragraph) 还会改 BEGIN_SRC 所在的行么?

你把光标放在#+header所在的行试一下

M-q会将所有的段落wrap 掉,同时也会把较长的src-block的头部声明也一起wrap掉,比如,

应该是这样的

#+BEGIN_SRC python :session :python /Users/tilabs/.conda/envs/tensorflow/bin/python :exports both :results output

但是现在被分为两行,变成:

#+BEGIN_SRC python :session :python /Users/tilabs/.conda/envs/tensorflow/bin/python :exports 
both :results output

光标放在+HEADER: :python ~/........C-c C-c也是不行

试一下其他参数是否起作用。应该尽量把问题拆开,逐个攻破。放在一起可能会搞不清真正的问题出在哪里。

查看一下 fill-paragraph-function 变量。 Emacs 和 Org 的版本多少,用了哪些包,建议用 emacs -q 启动。

这里的重点是 org-fill-paragraph,不是 M-q,我这里是正常的,如果你那边有问题的话,你应该 M-x org-submit-bug-report

您好,请问你最后搞定了嘛,我也想用orgmode记录tf,谢谢!

我是通过一个snippet解决的,如下:

# -*- mode: snippet -*-
# name: insert tensorflow code in orgmode
# key: tfs
# --
#+BEGIN_SRC python :session :python ~/.conda/envs/tensorflow/bin/python :exports both :results output
$1
#+END_SRC

如果想输出文件

# -*- mode: snippet -*-
# name: python src block with python with file result
# key: !pf
# --

#+BEGIN_SRC python :python ~/.conda/envs/tensorflow/bin/python :exports both :results file :var fname="${1:`(sangjee/buffer-basename)`}/${2:imagename}.png"
${3:import numpy as np
import matplotlib.pyplot as plt}

${4:#start your code}

plt.savefig(fname)
return fname
#+END_SRC

使用snippet之后,本人没有换行问题了。