首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在哪里/如何存储文本,如果不在kill-ring/寄存器中[elisp,emacs]

在哪里/如何存储文本,如果不在kill-ring/寄存器中[elisp,emacs]
EN

Stack Overflow用户
提问于 2013-01-20 17:57:07
回答 2查看 257关注 0票数 1

我希望能够将文本存储在两个位置之间(中间的字符串),但我不知道在哪里方便地存储它,可能只是本地存储,甚至是全局存储(letsetq)。答案可能就在那里,但我找不到。

示例:

我希望将文本存储在符号中,以便向后搜索。假设区域从(point)到第一个空格字符。

我以前的方法是使用(kill-ring-save),但我知道这是一个糟糕的做法。

从(这里)(message "hello")(点)

我对做这件事的更好的技术感兴趣,也对存储(point)周围的字符串的最佳方法感兴趣。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-20 19:03:27

如果您只需要一个临时的本地作用域,那么您肯定想要使用let

否则,您通常会定义一个变量(在命名时请记住,elisp没有名称空间,因此最佳实践是在实际情况下为给定库中的所有符号名称使用唯一可靠的前缀)。

代码语言:javascript
复制
(defvar SYMBOL &optional INITVALUE DOCSTRING)

如果省略INITVALUE参数,变量最初将不会被绑定,但会确保变量在使用后将使用动态绑定。

然后,您只需根据需要对变量执行setq

编辑:

要获取两个点之间的缓冲区内容,请使用以下任一方法

  • (buffer-substring START END)
  • (buffer-substring-no-properties START END)

取决于您是否希望保留文本属性。

票数 1
EN

Stack Overflow用户

发布于 2013-01-22 04:30:21

通常最简单的答案就是直接使用let。与您似乎认为的相反,它并不分配全局存储。事实上,它做的恰恰相反。

代码语言:javascript
复制
(let ((myvalue "temporary string"))
  (message myvalue) )
=> "temporary string"

myvalue
=> Lisp error: (void-variable myvalue)

而且,您可以很容易地使用变量编写函数,该变量的值仅在函数执行期间设置。interactive表单允许您轻松地获取点和标记值。

代码语言:javascript
复制
(defun mysearch (point mark)
  (interactive "r")
  (let ((str (buffer-substring-no-properties point mark))
    (message "your search for %s can commence ..." str) ) )

一种常见的习惯用法是使用save-excursion将指针移动到另一个地方,然后获取原始位置和结束位置之间的区域,然后对其执行某些操作。当您退出save-excursion时,光标的位置(以及其他几项内容)将恢复到以前的状态。

代码语言:javascript
复制
(defun mysearch ()
  (interactive)
  (save-excursion
    (let ((here (point)) str)
      (forward-word -1)
      (setq str (buffer-substring-no-properties (point) here))
      (message "your search for %s can commence ..." str) ) ) )

也许您还想看看http://ergoemacs.org/emacs/elisp_idioms.html

如果您需要在函数调用之间持久化值,那么通常要做的就是像@phils建议的那样defvar一个变量。几个带有相同前缀的变量听起来像是您应该为自己创建一个单独的模块。对于名称空间占用较少的灵活解决方案,可以创建自己的obarray (并获得某种大师身份)。另请参阅http://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Symbols.html#Definition%20of%20mapatoms

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14423386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档