Emacs的高级编辑功能

Emacs的高级编辑功能,emacs,Emacs,Emacs超棒的特性引起了很多争议。不管是它,还是它。我已经使用Emacs很多年了,所以没必要说服我 我个人发现,没有人谈论……实际上是编辑文本。你知道吗 Emacs是一个不错的操作系统,但它缺少一个像样的编辑器 开玩笑?直到我找到维姆,我才真正明白 现在,我用Emacs作为我的文本编辑器来写我的论文,所以我的心仍然依附于它。我也非常羡慕组织模式。所以我想知道是否真的有我一直错过的功能 我将给大家举几个我一直在使用的例子: o/o在当前光标上方/下方打开一个新行,并将我置于插入模式,无论光标在

Emacs超棒的特性引起了很多争议。不管是它,还是它。我已经使用Emacs很多年了,所以没必要说服我

我个人发现,没有人谈论……实际上是编辑文本。你知道吗

Emacs是一个不错的操作系统,但它缺少一个像样的编辑器

开玩笑?直到我找到维姆,我才真正明白

现在,我用Emacs作为我的文本编辑器来写我的论文,所以我的心仍然依附于它。我也非常羡慕组织模式。所以我想知道是否真的有我一直错过的功能

我将给大家举几个我一直在使用的例子:

  • o
    /
    o
    在当前光标上方/下方打开一个新行,并将我置于插入模式,无论光标在哪个位置
  • ci'
    删除当前/后续'-string'的内容,并将我置于插入模式
  • dat
    删除当前HTML标记
    cit
    将删除内容并将我置于插入模式
    cstt
    允许我编辑标签(例如将
    制作成
  • cs([
    将周围的“(“and”)更改为“[”和“]”
  • 扩展允许我处理Python缩进:
    dai
    将删除当前缩进的块,
    \\ai
    将注释掉它(\\是扩展)
在Emacs中是否有一些超级秘密的快捷方式,但这些快捷方式很容易访问?有一些“扩展选择”功能,它们的方式类似,尽管没有那么精确——但仍然非常有用

另外,请不要提出任何虚拟仪器仿真,只是不要


p.p.S.看在上帝的份上,我求求你,没有Emacs vs.Vim vs.任何战争。

我不是Emacs专家,但似乎涵盖了一些有用的例子。特别是第6项(缓冲区控制)和第7项(失去UI)似乎值得记住。此外,评论部分还涵盖了一些读者的提示。

  • vim
    o/o
    命令是emacs中的两个关键命令。对于
    o
    C-e
    (行尾,返回以创建新行)。对于
    o
    C-a C-o
    (行首,开行)
  • ffap copy string as kill
    (默认情况下不绑定到键,但很容易修复)执行类似于您的
    ci'
    。在emacs中,没有“插入模式”的概念
我不会将“(“”)更改为“[“”]”来学习它的键序列。如果必须这样做,我会首先转到
query replace regexp
C-M-%

我不怎么编辑python或HTML,但我相信在适当的模式下会有一些巧妙的技巧来满足您的需要

根据评论编辑

我经常使用的更高级编辑功能:

  • 键盘宏。这是一大类技巧,但如果在整个缓冲区中有许多类似的编辑,我会记录一个宏并重复它。如果宏非常有用,它可以保存以供将来的会话使用。当seek是宏的一部分时,这可能非常强大。用法的一个示例是使用
    enum
    ,并从中快速创建switch语句。有关详细信息,请参阅和
  • 每当我使用vim时,我总是错过增量搜索。不是高级的,但我发现它比vim中的搜索更容易使用,特别是当我不确定我要查找的内容的拼写时
  • 标记。每次启动增量搜索时,都会将当前位置推送到标记堆栈中,以便快速返回到以前的位置。您可以随时推标记,然后弹出标记堆栈以返回缓冲区中的感兴趣点。请参阅
  • 用于在远程计算机上编辑文件的TRAMP模式。请参阅
  • 矩形编辑。
    字符串插入矩形
    矩形删除
    是我的好朋友

很难知道你会发现什么有用。每个用户都会有不同的喜爱功能。促使我开始使用emacs的功能是
M-x compile
。使用
M-g n
跳转到编译输出中下一个错误或警告的文件位置。

您的问题没有答案

这是一个连续的过程,您可以从键入M-x帮助开始,并经常这样做

每个人都有一套不同的功能。因此,除了列出所有可用的文本编辑功能外,请尝试(重新)阅读、和。查找插件信息最活跃的地方是和(将随Emacs 24一起分发)

99%您不知道的功能将在上述链接中找到

当然,你也可以看看标准问答:。

它有很多技巧。大多数技巧我在阅读之前(突然)为自己找到,但这篇文章值得一读

试试
C-hk
每一个
C-M-
。像
M-C,M-l,M-u
这样的东西对我很有用,
M-z
对于
zap to char
。白金答案是“学会使用i-search”。
C-w,C-M-y,M-r
在i-search模式下非常有用

我不知道有什么软件包可以帮助我编辑一些围绕我的观点的东西。有一天我为自己写了一个,但它被证明是无用的。如果我介意再写一些东西,我首先要做的是——思考,我应该写什么。它们的行为如何?应该是针对每种括号的N个单独的命令,还是一个,但很聪明?应该怎么做ld it工作?为钥匙圈使用而杀人?(欢迎讨论)

对于~lisp,我使用sexp编辑命令

我为自己写了一些东西

(defun cm-fast-step-upward ()
  "Step 3 lines up, recenteres the screen."
  (interactive)
  (forward-line -3)
  (recenter))

(defun cm-fast-step-downward ()
  "Step 3 lines down, recenteres the screen."
  (interactive)
  (forward-line 3)
  (recenter))

(defun cm-find-any-bracket-forward()
  "Search for \"_}_]_'_>_)_end forward"
  (interactive)
  (re-search-forward "[\"}'>)]\\|\\(end\\)\\|\\]"))

(defun cm-find-any-bracket-backward()
  "Search for \"_{_[_'_<_(_begin forward"
  (interactive)
  (re-search-backward "[\"{'<(]\\|\\(begin\\)\\|\\["))

(defun cm-find-nonspace-backward()
  "Search for non tab, space, newline symbol backward."
  (interactive)
  (if (and
        (search-backward-regexp "[ 
  ]" (point-min) t)
        (search-backward-regexp "[^ 
  ]" (point-min) t))
    (forward-char)
    (goto-char (point-min))))

(defun cm-find-nonspace-forward()
  "Search for non tab, space, newline symbol backward."
  (interactive)
  (if (and
        (search-forward-regexp "[ 
  ]" (point-max) t)
        (search-forward-regexp "[^ 
  ]" (point-max) t))
  (backward-char)
  (goto-char (point-max))))

(defun cm-backward-delete-word(&optional arg)
  "DELETE word before cursor. Warning, this word cannot be yanked."
  (interactive "p")
  (let ((beg (point)))
    (backward-word arg)
    (delete-region beg (point))) )

(defun cm-delete-word(&optional arg)
  "DELETE word after cursor. Warning, this word cannot be yanked."
  (interactive "p")
  (let ((beg (point)))
    (forward-word arg)
    (delete-region beg (point))) )

(defun cm-delete-line(&optional arg)
  "DELETE line after cursor. Warning, this line cannot be yanked."
  (interactive "P")
  (if (equal arg '-) (setq arg -1))
  (let ((beg (point)))
    (if arg (forward-line arg)
    (goto-char (point-at-eol)))
    (if (= beg (point))
      (delete-char 1 nil)
      (delete-region beg (point)))))

(defun cm-reverse-region (&optional arg)
  "Reverse current region, like this: \"a(bc) d\" -> \"d )cb(a\"."
  (interactive "P")
  (let ((reversed (apply 'string (reverse (string-to-list (buffer-substring-no-properties (region-beginning) (region-end)))))))
    (delete-region (region-beginning) (region-end))
    (insert reversed)))

(provide 'cmmove)

我还想知道,你喜欢这个命令的哪种行为。如果他们找不到什么东西,他们应该发送消息还是抛出错误?

我知道你说过不要提及任何vi仿真模式,但是如果你有
(global-set-key [?\H-f] 'cm-find-nonspace-forward)
(global-set-key [?\H-b] 'cm-find-nonspace-backward)
(global-set-key [?\H-\]] 'cm-find-any-bracket-forward)
(global-set-key [?\H-\[] 'cm-find-any-bracket-backward)
(global-set-key [?\H-p] 'cm-fast-step-upward)
(global-set-key [?\H-n] 'cm-fast-step-downward)
(global-set-key (kbd "H-t") 'cm-reverse-region)
thing-at-point-utils.el
(global-set-key [(control c)(<)] 'ar-lesser-angle-or-copy-atpt)
(global-set-key [(control c)(>)] 'ar-greater-angle-or-copy-atpt)
(global-set-key [(control c)(\")] 'ar-doublequote-or-copy-atpt)
(global-set-key [(control c)(\')] 'ar-singlequote-or-copy-atpt)
(global-set-key [(control c)(\))] 'ar-parentize-or-copy-atpt)
(global-set-key [(control c)(\\)] 'ar-backslash-or-copy-atpt)
(global-set-key [(control c)(\])] 'ar-bracket-or-copy-atpt)
(global-set-key [(control c)(\})] 'ar-brace-or-copy-atpt)
(global-set-key [(control c)(_)] 'ar-underscore-or-copy-atpt)
(global-set-key [(control c)(super \})] 'ar-brace-or-copy-atpt)
(global-set-key [(control c)(\/)] 'ar-slash-or-copy-atpt)
https://launchpad.net/s-x-emacs-werkstatt