我在emacs中编写python.然而,不知何故,在emacs中运行的python解释器设法让我感到惊讶.
如果我写
print()
print(__name__)
print(__name__=='__main__')
if __name__ == '__main__':
print("indeed")
Run Code Online (Sandbox Code Playgroud)
在emacs缓冲区中,告诉emacs启动解释器并运行此缓冲区的内容,我得到一个包含的缓冲区
Python 3.3.5 (default, Mar 18 2014, 02:00:02)
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.
>>>
__main__
True
>>>
Run Code Online (Sandbox Code Playgroud)
(两者__main__
并True
与打印语句输出;蟒蛇缓冲总是显示>>>
并打印后立即,我意识到了这一点,这不是一个问题.)
在命令行中,双方python
并python -i
显示"确实",符合市场预期.
如何Emacs的能够评价的不一致性__name__=='__main__'
来True
,而不是在执行里面的东西if __name__ == '__main__':
?如何重新配置它以便它不再这样做?
正如@Wooble在评论中提到的,它可能是python.el
问题:C-c C-c
运行
python-shell-send-buffer
函数:
python-shell-send-buffer是python.el中的一个交互式编译的Lisp函数。
(python-shell-send-buffer和可选的ARG)
将整个缓冲区发送到劣质的Python进程。带有前缀ARG的代码允许在由分隔的块内执行代码
"if __name__=='__main__':"
即,要打印“ indeed”,请添加prefix C-u C-c C-c
。
问:我试图通过python.el进行挖掘,但是我仍然不确定如何以及在何处执行此操作。您能解释一下,以便我修改默认行为吗?
要查明C-c C-c
您的情况,请打开python文件并键入,M-x describe-key RET
然后键入C-c C-c
(实际上是按键)。默认情况下,它在中运行python-shell-send-buffer
功能python.el
。您可以重新定义键以使用参数调用函数,使其C-c C-c
行为类似于C-u C-c C-c
启用"if __name__=='__main__':"
部件:
;; Make C-c C-c behave like C-u C-c C-c in Python mode
(require 'python)
(define-key python-mode-map (kbd "C-c C-c")
(lambda () (interactive) (python-shell-send-buffer t)))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1121 次 |
最近记录: |