emacs中kill字或行函数的实现

emacs中kill字或行函数的实现,emacs,elisp,Emacs,Elisp,如何在emacs中实现一个杀死一个单词的函数,然后如果再次调用,它会立即杀死整行,可能称为kill word或line。我有点像elisp n00b,但如果有人能告诉我一个行为类似的函数,即在连续调用两次时有不同的操作,我可能自己也能做到 如果kill-line版本被调用,那么如果kill-ring包含完整的行,这将是很好的,也就是说,我猜在终止行之前,需要再次插入kill-word。下面是一个示例:“|”表示点的位置) 这是一次考试。 );第一次调用kill word或line 这是一行。 )

如何在emacs中实现一个杀死一个单词的函数,然后如果再次调用,它会立即杀死整行,可能称为
kill word或line
。我有点像elisp n00b,但如果有人能告诉我一个行为类似的函数,即在连续调用两次时有不同的操作,我可能自己也能做到

如果kill-line版本被调用,那么如果kill-ring包含完整的行,这将是很好的,也就是说,我猜在终止行之前,需要再次插入kill-word。下面是一个示例:“|”表示点的位置)

这是一次考试。

);第一次调用
kill word或line

这是一行。

);再次调用
kill word或line
获取

|


压井环应包含
example
这是一个示例行。

变量
last command
包含交互执行的最后一个命令,可用于测试是否连续调用同一命令两次:

(defun kill-word-or-line ()
  (interactive)
  (if (eq last-command 'kill-word-or-line)
      (message "kill line")
    (message "kill word")))

例如,在执行

时使用此机制,
last command
变量包含交互执行的最后一个命令,您可以使用该变量测试是否连续调用同一命令两次:

(defun kill-word-or-line ()
  (interactive)
  (if (eq last-command 'kill-word-or-line)
      (message "kill line")
    (message "kill word")))

例如,在

的实现中使用了此机制。您可以使用以下关于终止区域的建议来终止选定区域,或者先终止点上的单词,然后终止整行

断字
(脱脂压井区(首次激活光滑切割线之前)
“调用时,以交互方式删除当前单词或行。
如果只调用一次而不使用区域,则会扼杀当前单词。
第二次调用它将终止当前线路。”
(互动
(如果标记为活动(列表(区域开始)(区域结束))
(如果(eq最后一个命令“终止区域”)
(项目
;返回上一个kill以重建线
(美国佬)
添加一个空白的kill,否则会添加单词。
;更改为(kill new“t)以删除单词并仅
守住整条线。
(删除新的“”)
(信息“终止线”)
(列表(行起始位置)
(行起始位置2)))
(省去远足
(向前字符)
(倒转词)
(标记单词)
(信息“被删除的单词”)
(列表(标记)(第(()()())))(点)))
这也是一样,只是复制而不是杀戮

抄写字或行
(defadvice压井环保存(在平滑复制线激活编译之前)
在无区域交互调用时,复制单词或行
在没有区域的情况下调用一次将复制当前单词。
第二次调用它将复制当前行。“
(互动
(如果标记为活动(列表(区域开始)(区域结束))
(如果(eq最后一个命令“压井环保存”)
(项目
取消注释,仅将管线保留在压井环中
(杀死新的“t”)
(消息“复制行”)
(列表(行起始位置)
(行起始位置2)))
(省去远足
(向前字符)
(倒转词)
(标记单词)
(消息“复制的单词”)
(列表(标记)(第(()()())))(点)))

这两个选项都是根据中的命令改编的。

您可以使用以下关于
kill region
的建议来删除所选区域,或者先删除点上的单词,然后删除整行

断字
(脱脂压井区(首次激活光滑切割线之前)
“调用时,以交互方式删除当前单词或行。
如果只调用一次而不使用区域,则会扼杀当前单词。
第二次调用它将终止当前线路。”
(互动
(如果标记为活动(列表(区域开始)(区域结束))
(如果(eq最后一个命令“终止区域”)
(项目
;返回上一个kill以重建线
(美国佬)
添加一个空白的kill,否则会添加单词。
;更改为(kill new“t)以删除单词并仅
守住整条线。
(删除新的“”)
(信息“终止线”)
(列表(行起始位置)
(行起始位置2)))
(省去远足
(向前字符)
(倒转词)
(标记单词)
(信息“被删除的单词”)
(列表(标记)(第(()()))(()))(点)))
这也是一样,只是复制而不是杀戮

抄写字或行
(defadvice压井环保存(在平滑复制线激活编译之前)
在无区域交互调用时,复制单词或行
在没有区域的情况下调用一次将复制当前单词。
第二次调用它将复制当前行。“
(互动
(如果标记为活动(列表(区域开始)(区域结束))
(如果(eq最后一个命令“压井环保存”)
(项目
取消注释,仅将管线保留在压井环中
(杀死新的“t”)
(消息“复制行”)
(列表(行起始位置)
(行起始位置2)))
(省去远足
(向前字符)
(倒转词)
(标记单词)
(消息“复制的单词”)
(列表(标记)(第(()()))(()))(点)))

这两个都是根据中的命令改编的。

谢谢,这非常有效!我只是让消息更加一致,即添加了“删除单词”和“删除行消息”谢谢,这非常有效!我只是让消息更加一致,即添加了“删除单词”和“删除行消息”