emacs 学习成长记

emacs 学习成长记:(org 文档)
* 1. emacs的删除 kill-ring
  常规删除我们都知道了,C-d, M-d,C-k 现在再说说另外增强的删除操作
  M-\              ;delete horizontal space
  M-SPC              ;just one space,ubuntu下该键被菜单拦截,可用ESC-SPC代替
  C-X C-o              ;delete blank line
  需要注意的是,C-o 是打开一个新行的意思, C-X o却可能绑定的是跳转到其它窗口,不要混淆.
  对于那些无用的白空格,emacs还有更高级的手段, whitespace mode, 对于那些无用的尾部空格,
  可以一条命令删除: M-x delete-trailing-whitespace
  1.1 剪切也很强,M-d 是剪切不是删除,那些花哨的功能就不说了, 把它们归结到选定区域再删除就可以了,强调两条方便的命令.
  C-S-<BACK> 相当于vim 的dd                                   // 为什么和vim 象比拟,我就感到特别亲切呢.
  M-z Char  相当与vim df
  1.2 块操作对应于emacs 矩形操作, 掌握常用的C-x r (k,y M-w)就可以了,其它不常用.
  kill 有一个kill-ring , 查看可用C-h v kill-ring
* 2. 跳转历史: mark-ring, global-mark-ring
  窗口显示的内容免不了跳来跳去,因为我们所关心的内容变了, 这就需要有一个跳转记录.
  能方便的前进,后退.
  emacs 对每一个缓冲保留一个跳转ring,C-SPC C-SPC 压进一个mark(前一个C-SPC设置mark,后一个C-SPC解除mark,很多操作都会影响mark.
  C-u C-SPC 会弹出mark并将光标移动到mark. 刚才的point进入mark-ring
  只有回跳,没有前行,默认最多16个,有点不太方便,可用插件进行功能扩展.
  查看: C-h v mark-ring
  C-x C-SPC 会操作global-mark-ring
  如果想跳转到固定位置,你需要位置寄存器.
* 3. 对状态行(mode line)的研究,阅读emacs-manual, 搞清行号,列号显示.
  是的,在菜单->options->show/hide->有line-number, column-number 选项,
  但是对应 emacs 的命令是什么呢? 本来一般编辑器菜单里实现就到头了,但这是emacs.可进一步.
  原来它执行的是下面的命令:line-number-mode,column-number-mode,还可以简化为linum-mode
  U:--- 含义: U大概是unicode 编码的意思,--表示文件和缓冲内容一致.**表示不一致.
  %% 表示文件是只读的. 执行快捷键C-x C-q 就能完成read-only-mode 模式转换.
  %* 提示你,文件已经变成只读的了,但是缓冲和文件不同步,需要保存文件才能同步.

* 4. minibuffer. command-history 变量
  它就是一个小缓冲,专门用来记录命令历史, 命令历史可以通过C-h v command-history 来查看.小缓冲是一个接口,实际执行的是lisp 命令,用M-p,M-n来追溯历史命令.
  minibuffer中有C-x ESC ESC 重复复杂命令,C-x z 重复最后命令,慢慢体会.

* 5. emacs 中的寄存器及使用
  寄存器就是用来存放东西的,对应一个变量,或者说对应一块内存
  就远不是cut-copy-paste 那么简单了.不过道理还是一样.
  emacs 功能强大,首先也再于它的寄存器功能强大.相较vim的寄存器,它又有新特征.
  位置寄存器,文本寄存器,矩形寄存器,配置寄存器,数字寄存器,文件寄存器,键盘宏寄存器.
  vim 中寄存器主要是位置和文本寄存器,没有区分那么细也运行很好,emacs 又有哪些说法?
  位置寄存器
  vim        emacs
  mR        C-x r <SPC> R        ;标记
  'R        C-x r j        R        ;跳转
  显示出vim 简洁, emacs 有后劲
  文本寄存器
  vim        emacs
  "Ry   (yank)    C-x r s R        ;save
  "Rp   (paste)    C-x r i R        ;insert
  矩形寄存器
  C-x r r R
  ;这个命令表示是copy进矩形区域,而vim 则用矩形选择来对应
  至于配置寄存器, emacs 可以保留一个窗口的状态,而vim 用session 来保留,
  emacs 有数字寄存器,存数并可实现加减, vim 用寄存器也可实现数字加减.
  文件名寄存器是把文件名放入寄存器中, 方便使用, 目前还没有用到.
  键盘宏寄存器, 其内容存放的是键盘操作过程. 到记录宏使用宏时在介绍.
 
  bookmarks.
  为emacs 特有,以文件的方式(持久性)记录文件位置.
  C-x r m <RET>        ;默认名称
  C-x r m BOOKMARK <RET>    ;带名称
  C-x r b BOOKMARK <RET>  ;branch, 由于j被用作跳转到寄存器,所以跳转到bookmark改用b
  C-x r l         ;列出bookmark
  那么系统剪切板与emacs 寄存器如何对应呢? 实验知:
  往系统剪切板copy点东西,在kill-ring 中是看不见的,但C-y却能yank 进来
  M-w C-w 内容不仅进入kill-ring,也进入系统剪贴板.
  上面的叙述,还停留在emacs 基本操作及概念上. emacs 要想出山,除了要熟练基本操作外,
  多文件的处理必需过关,
 
  修改bug 从搜索开始.
* 6. 查找与替换
** 6.1 最简单的查找是C-s, C-r
   当出现搜索提示符时:
   C-w (isearch-yank-word-or-char)可把当前点单词或字符放上
   M-s . 搜索光标下字符
   
   查找正则表达式C-M-s, C-M-r
   正则表达式注意反斜杠\的转意作用及一些特殊的转意.
   
** 6.2 常用的两个搜索命令及客户化代码
1. M-x occur    ;在一个文件中搜索匹配行
2. rgrep 命令. 在一个目录下对某类文件进行递归查找 , 常用!
grep 有没有查看上一次的grep 结果,相当于vim 的colder?
因为我经常找来找去, 不能每次都找. 需要保存上次查找结果.
当我把emacs 的查找结果缓冲区试图改名, 以便能保留第一次结果,进行第二次查找时,
才进一步理解了这个无文件对于的特殊缓冲区到底是什么意思,我可以把它另存为一个文件,
用vim打开, 这样它的神秘性才彻底消失.
后来发现一个grep-a-lot 插件,很好用,可满足要求.
emacs grep 可以比美vim 的grepit 插件, 这样emacs 就可以应对项目查找了.

** 6.3 find-name-dired 命令 . 可以对标记的文件进行查找
   体现了emacs 交互式操作的过程. 耶!!
   
   例如,一个例子.
   M-x find-name-dired RET
   Select root of my project
   Enter *.cpp as the filenames to match
   Press "t" to select all files found
   Press "Q" (shift Q) to start the search/replace
   Enter "transaction" as the query, then enter "invoice" as the replacement.
   
* 7. find 查找文件
  先搞定find-name-dired 能够从一个目录中查找到相关的文件再说吧,这是第一步.
  记着一个模糊的文件名称, 我应该能够找到跟它想近似的文件名.
  M-x find-name-dired <目录> <glob标记的文件名称> , 参考前面的例子.
  可以查到相关的文件.
  这大概可以等价于 vim project 文件目录下,用/搜索文件名.

* 8. 小结


不知道为什么, 我又一次的折腾了emacs. 上面大部分是阅读emacs manual所得.
总之,先把emacs 用起来,不舒服的地方或者忍,或者想办法解决,用它完成一些简单的编辑任务.
离开你熟悉的生态环境vim,改用emacs,这就是一种挑战(challenge), 不论vim 能做什么,emacs
总能找到一种办法应对, 好, 让emacs 慢慢追赶vim.
收获有3:
1. 回顾了一些emacs 的基本概念.
2. 重点是掌握了rgrep的用法,从此维护中小project 已不成问题
3. 安装了counsel 扩展,方便了Alt-x 等命令的输入, 为emacs以后继续扩展打下基础.

company mode, 当它在shell mode 下进行 company-capf 补全时,一下子爱上了emacs!

emacs 三重进步
1. 似乎理解了init-package, 这是第一次让我有了感觉.
2. 重用occur 和 rgrep ,并加上grep-a-lot, 实际比美和超过vim 的grepit, 这很实用.
3. 体验了company mode, 那么贴心. 相比vim 的C-p,C-n 补全.
其实,vim 也已经搞定一切了, 为什么还要emacs?  嗯,继续走着瞧吧!

第4步:
搞定了projectile (处理了一点小bug),其功能之强超过了vim的project+altenate+grepit
还剩下一个重度依赖vim taglist, 且看emacs 如何超越?
 hs_minor_mode 也可以一览代码全貌, 不再依赖taglist 了, alt-x list-tags 命令也能列出tags.
第5步:
这里估计需要clang 出场了,猜测.!
先用imenu-list 抵挡一阵! 有taglist 风采. 现在已经不再依赖于taglist了 hs_minor_mode 挺好用.
第6步:
在代码间游走. 像vim的 gd跳转到变量, C-]
loccur.el 可以代替gd,绑定快捷健C-o, Alt+. 等价与C-] 都依赖于tags

2021 年6月1号

当我逐渐熟悉了emacs 的键盘操作,(是这些web代码令我熟悉的.emacs26 对web编程支持较好)
折返c/c++, 想要一个IDE, 其实emacs 已经准备好了.
编译: Alt+x compile 输出的结果可以点击链接跳转到编译代码
调试: Alt+x gdb 就可以调试代码了,可设断点,可执行.好强悍的平台,其它的db工具应该也可用吧?
bashdb, phpdbg

* TODO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值