假设我有一个缓冲区,其中的代码(在本例中为Python)的组织方式如下:
.. cell 1 ..
##
.. cell 2 ..
# this is a comment
### this is also a comment
.. still cell 2 ..
##
.. cell 3 (code that is indented)
字符##的序列旨在界定缓冲区中的单元(代码区域/块).角色#在Python中开始注释,因此##被该语言视为注释.可以在例如Elisp与;;或其他编程语言.
我想定义一个Emacs命令,该命令在被调用时会将当前单元格(即当前位于其上的point /光标所在的单元格)定义为Emacs region
(即突出显示该单元格).
我如何在Emacs中做到这一点?
以供参考:
>类似于MATLAB中的单元格或code sections的概念
>这是在Vim中实现此功能的thread.
解决方法:
这是一个解决方案:
(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))))
经过测试:
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."
工作正常.
是否有理由不使用缩进级别而不是注释作为锚点?