【发布时间】:2016-03-11 07:55:59
【问题描述】:
我想创建一个命令,如果该区域处于活动状态,则发送该区域,如果不是,则评估当前行/语句并将点进一步转移到下一个语句。
我从This solution.开始 现在我无法让 (python-shell-send-region) 工作,因为我不知道如何将区域的开头和结尾传递给它。
到目前为止,我有这个:
(defun my-python-send-region (&optional beg end)
(interactive)
(if (use-region-p)
(python-shell-send-region) (let ((beg (cond (beg beg)
((region-active-p)
(region-beginning))
(t (line-beginning-position))))
(end (cond (end end)
((region-active-p)
(copy-marker (region-end)))
(t (line-end-position)))))
(python-shell-send-region beg end)
(python-nav-forward-statement))))
(add-hook 'python-mode-hook
(lambda ()
(define-key python-mode-map "\C-cn" 'my-python-send-region)))
更新: 根据 Andreas 和 Legoscia 的建议,我稍微改变了结构。
现在我得到一个错误 (Invalid function: (setq beg (point)) for:
(defun my-python-send-region (&optional beg end)
(interactive)
(if (use-region-p)
(python-shell-send-region (region-beginning) (region-end))
((setq beg (point))
(python-nav-end-of-statement)
(setq end (point))
(python-shell-send-region (beg) (end)))
(python-nav-forward-statement))))
但是,这是可行的:
(defun my-python-send-region (&optional beg end)
(interactive)
(setq beg (point))
(python-nav-end-of-statement)
(setq end (point))
(python-shell-send-region beg end))
【问题讨论】:
-
由于 Python 对 WRT 空格的敏感性,发送区域或行容易出错。而是使用针对 Python 表单的命令——发送块、语句等。