当前位置:首页 > 操作系统 > MacOs

python-Emacs中的单元格模式

假设我有一个缓冲区,其中的代码(在本例中为Python)的组织方式如下:

<code>.. cell 1 ..
## 
.. cell 2 ..

# this is a comment

### this is also a comment

.. still cell 2 ..

  ##
  .. cell 3 (code that is indented)
</code>

字符##的序列旨在界定缓冲区中的单元(代码区域/块).角色#在Python中开始注释,因此##被该语言视为注释.可以在例如Elisp与;;或其他编程语言.

我想定义一个Emacs命令,该命令在被调用时会将当前单元格(即当前位于其上的point /光标所在的单元格)定义为Emacs region(即突出显示该单元格).

我如何在Emacs中做到这一点?

以供参考:

>类似于MATLAB中的单元格或code sections的概念
>这是在Vim中实现此功能的thread.

解决方法:

这是一个解决方案:

<code>(defun python-inside-comment-p ()
  (save-excursion
    (beginning-of-line 1)
    (looking-at "^#")))

(defun python-select-cell ()
  (interactive)
  (goto-char
   (if (re-search-backward "^\s-*##[^#]" nil t)
       (match-end 0)
     (point-min)))
  (while (and (python-inside-comment-p)
              (eq 0 (forward-line 1)))
    nil)
  (set-mark (point))
  (goto-char
   (if (re-search-forward "^\s-*\(##[^#]\)" nil t)
       (- (match-beginning 1) 2)
     (point-max))))
</code>

经过测试:

<code>print "Beautiful is better than ugly."
##
print "Explicit is better than implicit."
print "Simple is better than complex."
print "Complex is better than complicated."
# this is a comment
print "Flat is better than nested."
### this is also a comment
print "Sparse is better than dense."
##
print "Readability counts."
print "Special cases aren't special enough to break the rules."
print "Although practicality beats purity."
print "Errors should never pass silently."
print "Unless explicitly silenced."
</code>

工作正常.
是否有理由不使用缩进级别而不是注释作为锚点?


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐