热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Emacs:如果不考虑随后的杀戮,如何抽出最后一个猛拉的文字?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Emacs:如果不考虑随后的杀戮,如何抽出最后一个猛拉的文字?相关的知识,希望对你有一定的参考价值。 我经常发现自己在做了一些杀戮之后反复做一些东西,

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Emacs:如果不考虑随后的杀戮,如何抽出最后一个猛拉的文字?相关的知识,希望对你有一定的参考价值。



我经常发现自己在做了一些杀戮之后反复做一些东西,它变成了一个过程:



  1. C-ÿ

  2. C-y M-y

  3. C-y M-y M-y

  4. C-y M-y M-y M-y

每当我杀死一些文本时,它会在kill ring中推回第一个kill,这样我就需要遍历所有的杀戮以返回我想要的文本。我想要做的是反复猛拉同一文本,同时杀死文本之间的冲突。这可能吗?


答案

这是一个奇怪的黑客,但可能有所帮助。

第一次使用M-y时,通常会出现错误(之前没有猛拉)。所以这个想法是第一次你得到最后一次猛击而不是最后一次击杀。

为了存储最后一次猛拉,我在这个例子中使用'Y'寄存器。

这两个函数将包围yank和yank-pop。你期待错误,我期待建议。

(defun jp/yank (&optional arg)
"Yank and save text to register Y"
(interactive)
(set-register ?Y (current-kill 0 t))
(yank arg))
(defun jp/yank-pop (&optional arg)
"If yank-pop fails, then insert register Y"
(interactive)
(condition-case nil
(yank-pop arg)
(error (insert (get-register ?Y)))))
(global-set-key (kbd "M-y") (quote jp/yank-pop))
(global-set-key (kbd "C-y") (quote jp/yank))

另一答案

不要使用杀环;将文本放入寄存器中。 C-x r s a将该地区的文本存入(比如)注册“a”;然后C-x r i a将其插入其他地方。


另一答案

您可以使用M-x delete-region来删除文本,如果您想要大量使用它,可能会将其绑定到密钥。


另一答案


  1. 如果要反复抽取相同的文本,请使用secondary selection而不是区域或已杀死的文本。
    香草Emacs缺少什么是一个关键的绑定来挑选二级选择。我使用C-M-y(参见库second-sel.el)。

  2. 要直接访问杀戮戒指中的任何杀戮,请使用M-y与Browse Kill Ring或Icicles。在这两种情况下,顶级的M-y都可以访问kill ring中的所有条目。
    如果您使用库second-sel.el,那么除了杀戮戒指之外,您还可以访问过去次要选择的铃声。
    如果你使用库second-sel.el和Icicles,那么M-y会从你最后拉出的戒指(杀死戒指或二次选择戒指)中拉出一个条目。
    如果您使用库browse-kill-ring+.el,那么kill-ring浏览器也允许您访问另一个环(如果您使用库second-sel.el,默认情况下,这是次要选择的环)。


另一答案

我试图破解使用次要模式的路线。我们称之为delete-mode。进入删除模式后,kill命令(kill-linekill-paragraphkill-word,...)将改变它们的行为,以便命令的kill-region部分将被delete-region替换,并且新材料将不会被添加到kill ring中。在此模式下,杀环将保持不变。当您切换回此模式时,行为将恢复正常。

以下是试图实现上述内容的不完整代码。它在切换到删除模式时正常工作,但它有切换回问题(关闭次模式)。任何帮助解决这个问题将不胜感激。

(defvar delete-mode nil)
(defun delete-mode ()
"delete minor-mode"
(interactive)
(setq delete-mode (not delete-mode))
(if delete-mode
(defalias 'kill-region 'delete-region)
(defalias 'kill-region 'original-kill-region)
)
)
(if (not (assq 'delete-mode minor-mode-alist))
(setq minor-mode-alist
(cons '(delete-mode "Delete mode on") minor-mode-alist)
)
(defalias 'original-kill-region 'kill-region)
)

另一答案

我会尝试更多地使用delete-region,但我更了解kill命令。不需要编程或提前规划的技巧是在特别恼人的M-y串之后使用M-w。这使得最终猛拉的更容易访问的副本进入杀戮戒指。


另一答案

更好的Yank-Pop实施

这定义了一个更好的yank-pop实现,它试图修复增加的yank-pop问题。

它只覆盖函数“current-kill”。由于在Emacs中使用yank,yank-pop和kill ring变量和函数的模块化设计,事实证明,重写“current-kill”是获得我们想要的行为所必需的。

理想的行为是(1)杀死一些东西仍然把它放在杀戮戒指的前面,但现在(2)yanking或猛拉一些东西也把它放在杀戮戒指的前面(3)我们保留的能力yank-pop通过递增一个全局变量并使用它来替换最后一个yank-pop'ped项目来显示在kill ring中移动的外观。这也意味着(4)过渡性猛拉的物品(即由yank或yank-pop命令放置的物品,其中下一个命令是猛烈的弹出物)最终会保持在杀戮戒指中的位置。

;; Example:
;; (setq kill-ring '("a" "b" "c" "d" "e"))
;;
;; keystroke kill ring contents value of kill-ring-yank-index
;; C-y ("a" "b" "c" "d" "e") 0
;; M-y ("b" "a" "c" "d" "e") 1
;; M-y ("c" "a" "b" "d" "e") 2
;; M-y ("d" "a" "b" "c" "e") 3
;; C-y ("d" "a" "b" "c" "e") 0
;; M-y ("a" "d" "b" "c" "e") 1
;; M-d ("x" "a" "d" "b" "c" "e")
;; etc.

代码:

;; ----------------------------------------------------------------
;; helper functions
(defun list-insert-before (l n x)
(if (<= n 0) (cons x l)
(cons (car l) (list-insert-before (cdr l) (- n 1) x))))
(defun list-prepend-nth (l n)
(if (<= n 0) l
(let* ((lx (list-prepend-nth (cdr l) (- n 1))))
(cons (car lx) (cons (car l) (cdr lx))))))
(defun list-insert-car-at (l n)
(list-insert-before (cdr l) n (car l)))
;; ----------------------------------------------------------------
;; overriding current-kill
(defvar kill-ring-yank-index 0
"Index into kill-ring of last yank-pop. The item yank-popped
will be at the head of the kill ring, but if the next command
is also yank-pop, it will be returned here first before this
variable is incremented.")
(defun current-kill (n)
"Replaces standard 'current-kill' function. This version tries
to fix the increasing yank-pop problem.
TODO:
- respect second argument of original function
- deal with 'interprogram-{cut,paste}-function'
"
(if (eq 0 n) ;; looks like we're doing a yank; reset
;; kill-ring-yank-index to 0 to indicate that the
;; current head of the list is useful to the user
(progn (setq kill-ring-yank-index 0)
(car kill-ring))
;; otherwise put the head of kill-ring back where we had
;; previously found it, and fetch the next element
(setq kill-ring
(list-insert-car-at kill-ring kill-ring-yank-index))
(setq kill-ring-yank-index (+ kill-ring-yank-index n))
(when (>= kill-ring-yank-index (- (length kill-ring) 1))
(setq kill-ring-yank-index (- (length kill-ring) 1))
(message "Reached end of kill-ring"))
(when ( (setq kill-ring-yank-index 0)
(message "Reached beginning of kill-ring"))
(setq kill-ring (list-prepend-nth kill-ring kill-ring-yank-index))
(car kill-ring)))
;; ----------------------------------------------------------------
;; new key binding
;; Here's an auxiliary function and key binding that makes it easy to
;; go back and forth in the kill-ring while we're yank-popping
(defun yank-pop-back () "" (interactive "*")
(yank-pop -1))
(global-set-key "\C-\M-y" 'yank-pop-back)

另一答案

我用



M-x浏览杀死环


使用键绑定'M-y'。还有掌舵支持。



https://www.emacswiki.org/emacs/BrowseKillRing


提供更多解决方案



推荐阅读
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
author-avatar
丿至尊丨紫风
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有