Emacs的高级编辑功能
Emacs超棒的特性引起了很多争议。不管是它,还是它。我已经使用Emacs很多年了,所以没必要说服我 我个人发现,没有人谈论……实际上是编辑文本。你知道吗 Emacs是一个不错的操作系统,但它缺少一个像样的编辑器 开玩笑?直到我找到维姆,我才真正明白 现在,我用Emacs作为我的文本编辑器来写我的论文,所以我的心仍然依附于它。我也非常羡慕组织模式。所以我想知道是否真的有我一直错过的功能 我将给大家举几个我一直在使用的例子:Emacs的高级编辑功能,emacs,Emacs,Emacs超棒的特性引起了很多争议。不管是它,还是它。我已经使用Emacs很多年了,所以没必要说服我 我个人发现,没有人谈论……实际上是编辑文本。你知道吗 Emacs是一个不错的操作系统,但它缺少一个像样的编辑器 开玩笑?直到我找到维姆,我才真正明白 现在,我用Emacs作为我的文本编辑器来写我的论文,所以我的心仍然依附于它。我也非常羡慕组织模式。所以我想知道是否真的有我一直错过的功能 我将给大家举几个我一直在使用的例子: o/o在当前光标上方/下方打开一个新行,并将我置于插入模式,无论光标在
/o
在当前光标上方/下方打开一个新行,并将我置于插入模式,无论光标在哪个位置o
删除当前/后续'-string'的内容,并将我置于插入模式ci'
删除当前HTML标记dat
将删除内容并将我置于插入模式cit
允许我编辑标签(例如将cstt
制作成
)
将周围的“(“and”)更改为“[”和“]”cs([
- 扩展允许我处理Python缩进:
将删除当前缩进的块,dai
将注释掉它(\\是扩展)\\ai
p.p.S.看在上帝的份上,我求求你,没有Emacs vs.Vim vs.任何战争。我不是Emacs专家,但似乎涵盖了一些有用的例子。特别是第6项(缓冲区控制)和第7项(失去UI)似乎值得记住。此外,评论部分还涵盖了一些读者的提示。
- vim
命令是emacs中的两个关键命令。对于o/o
,o
(行尾,返回以创建新行)。对于C-e
,o
(行首,开行)C-a C-o
(默认情况下不绑定到键,但很容易修复)执行类似于您的ffap copy string as kill
。在emacs中,没有“插入模式”的概念ci'
query replace regexp
(C-M-%
)
我不怎么编辑python或HTML,但我相信在适当的模式下会有一些巧妙的技巧来满足您的需要
根据评论编辑
我经常使用的更高级编辑功能:
- 键盘宏。这是一大类技巧,但如果在整个缓冲区中有许多类似的编辑,我会记录一个宏并重复它。如果宏非常有用,它可以保存以供将来的会话使用。当seek是宏的一部分时,这可能非常强大。用法的一个示例是使用
,并从中快速创建switch语句。有关详细信息,请参阅和enum
- 每当我使用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