Emacs 中给文本加引号的插件

简介: 前几天 @刘鑫-MarchLiu 在微博上发布了一个给给文本加引号的插件:http://weibo.com/1729408273/eDcC8e8w6aD。不过用起来有点小问题:两头都只能插入一个字符,因此不能用于添加 XML 标签;光标控制上有个 bug,每次执行后光标会往左移动一个字符。我自己刚刚也实现了一下,不过我的实现灵活性比较差(前后的符号必须由用户手工输入,不能以参数形式传

前几天 @刘鑫-MarchLiu 在微博上发布了一个给给文本加引号的插件:http://weibo.com/1729408273/eDcC8e8w6aD。不过用起来有点小问题:

  1. 两头都只能插入一个字符,因此不能用于添加 XML 标签;
  2. 光标控制上有个 bug,每次执行后光标会往左移动一个字符。

我自己刚刚也实现了一下,不过我的实现灵活性比较差(前后的符号必须由用户手工输入,不能以参数形式传递):

(defun wrap-thing (thing)
  "Wrap the thing at point.
THING is a symbol which specifies the kind of syntactic entity you want.
Possibilities include `region', `symbol', `list', `sexp', `defun', `filename',
`url', `email', `word', `sentence', `whitespace', `line', `page' and so on."
  (interactive)
  (let ((range (if (eq thing 'region)
                   (cons (region-beginning) (region-end))
                 (bounds-of-thing-at-point thing)))
        (wrapper (cons (read-string "Left: ")
                       (read-string "Right: "))))
    (save-excursion
      (goto-char (cdr range))
      (insert (cdr wrapper))
      (goto-char (car range))
      (insert (car wrapper)))))

(defmacro make-wrap-for (&rest things)
  "A tool for define wrap-region, wrap-word etc."
  (let ((exp '()))
    (dolist (e things)
      (push `(defun ,(intern (concat "wrap-" (symbol-name e))) ()
               (interactive)
               (wrap-thing (quote ,e))) exp))
    (push 'progn exp)))

(make-wrap-for region symbol list sexp defun
               filename url email word sentence
               whitespace lint page)

(global-set-key (kbd "C-.") 'wrap-region

把上面的代码放到你的 .emacs 文件中,就能用 C-. 来调用了。如果有需要,你还可以再将 wrap-word、wrap-sentence 等绑定到其他键。

2011-08-23

今天重新实现了 make-wrap-for 这个宏,虽然物理行数还多了一行,但我觉得这个实现更优雅:

(defmacro make-wrap-for (&rest things)
  "A tool for define wrap-region, wrap-word etc."
  `(progn
     ,@(mapcar
        (lambda (e)
          `(defun ,(intern (concat "wrap-" (symbol-name e))) ()
             (interactive)
             (wrap-thing ',e)))
        things)))

为方便其他朋友提问和指正,转载是请保持文章完整性,并以超链接形式注明原始作者“redraiment”和主站点地址,谢谢。

我的邮箱,欢迎来信(redraiment@gmail.com
我的CSDN博客(梦婷轩):http://blog.csdn.net/redraiment
我的百度空间(梦婷轩):http://hi.baidu.com/redraiment

目录
相关文章
|
5月前
|
前端开发
Clion注释缩进设置
Clion注释缩进设置
|
6月前
VSCode将某个字符替换为换行符并换行显示
VSCode将某个字符替换为换行符并换行显示
506 1
VSCode将某个字符替换为换行符并换行显示
|
5月前
|
开发工具 Python
[oeasy]python0021_宝剑镶宝石_爱之石中剑_批量替换_特殊字符_特殊颜色
在这个文本中,作者描述了一个逐步修改Python游戏`game.py`的过程,以将小丑的眼睛和石中剑的图形替换为爱心符号,并且将其颜色更改为红色。以下是内容的摘要: - 用户回顾了之前对`game.py`的分析和理解。 - 通过使用方向键和编辑模式,在代码中找到了小丑眼睛和石中剑的位置,用爱心符号(❤)替换了它们。 - 如果遇到问题,建议使用最新版的火狐浏览器进行粘贴操作。 - 使用Vim编辑器的命令模式批量替换了剑柄上的数字8为爱心,使整个剑柄充满了爱心。 - 通过插入特定代码,将爱心变为红色,从而得到红色的“爱之大剑”。
35 0
|
6月前
|
Linux C++
vscode 如何修改c/c++格式化风格,大括号不换行
vscode 如何修改c/c++格式化风格,大括号不换行
|
机器学习/深度学习 移动开发 前端开发
Sublime Text3快捷键大全--正则表达式元字符-详细说明
Sublime Text3快捷键大全--正则表达式元字符-详细说明
260 0
vscode中粘贴文本缩进混乱的解决
有时候用vscode写代码时候,会碰到这样的问题,从Excel表中复制制表符分割的文件到vscode中去进行处理,分隔符就变了,像下图一样,有的行1个空格分割,有的行变为3个空格,格式已经发生混乱。这样会导致写代码用split分割时候你不知道以什么分割,文本少的时候还OK,手动改改,文本大的时候,就麻烦了必须得让他们统一,复制的啥格式粘贴就得是啥格式。
499 0
vscode 格式化使用Tab缩进4个制表符
vscode 格式化使用Tab缩进4个制表符
697 0
|
存储 移动开发 Unix
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines
150 0
[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines
|
Perl
文本三剑客之sed编辑器(中)
文本三剑客:都是按行读取后处理。 grep 过滤行内容。 awk 过滤字段。 sed 过滤行内容;修改行内容。
127 0
|
人工智能 开发工具 Perl
文本三剑客之sed编辑器(下)
文本三剑客:都是按行读取后处理。 grep 过滤行内容。 awk 过滤字段。 sed 过滤行内容;修改行内容。
132 0