Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2077|回复: 4
打印 上一主题 下一主题

emacs

[复制链接]

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
跳转到指定楼层
楼主
发表于 2017-9-11 16:37:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

将以下内容添加到.zshrc或者.bashrc,取决于你用什么shell
  1. # alias emacs
  2. alias emacsd='emacs --daemon'
  3. alias e='emacsclient -t'
  4. alias ec='emacsclient -c'

  5. # run emacs daemon
  6. [[ -z $(ps -C 'emacs --daemon' -o pid=) ]] && emacsd

  7. # add kill emacs function
  8. function kill-emacs(){
  9.     emacsclient -e "(kill-emacs)"
  10.     emacs_pid=$( ps -C 'emacs --daemon' -o pid= )
  11.     if [[ -n "${emacs_pid}" ]];then
  12.         kill -9 "${emacs_pid}"
  13.     fi
  14. }
复制代码


打开终端会自动运行emacsd启动emacs daemon server。后面都使用ec来编辑文件,使用c在终端编辑文件。 emacs daemon模式下emacs会一直在后台以服务的方式运行,ec会启动一个客户端连接到这个服务。所以会非常快。
当你插件非常多时,启动一次是很耗时的。我的emacs daemon启动一次大概要20s,但使用ec都是瞬开。
关闭emacs,在终端调用kill-emacs即可。





回复

使用道具 举报

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
沙发
 楼主| 发表于 2017-9-11 16:44:30 | 只看该作者
本帖最后由 firemail 于 2017-9-12 20:23 编辑

终端下打开emacs
emacs -nw
焦点移动到下一窗口(常用)
M-x other-window,快捷键是`C-x o`.

关闭当前缓冲区是 c-x k。

切换多个Buffer
C-x b


C-x [                  到页首                             
C-x ]                  到页尾                            
M-<                    到缓冲首部                      Alt +Shift + <   
M->                    到缓冲尾部   


  C-v 向下翻页
  M-v 向上翻页


帮助
      C-h t 入门指南
      C-h v 查看变量
      C-h f 查看函数
      C-h ? 查看帮助列表  





回复 支持 反对

使用道具 举报

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
板凳
 楼主| 发表于 2017-9-12 11:32:24 | 只看该作者
本帖最后由 firemail 于 2017-9-12 11:55 编辑

在Emacs(终端)中使用树形“资源管理器”——Sr-Speedbarsr-speedbar可以让speedbar嵌入当前frame中,而不是以单独一个frame的形态游离在外. 这样可以方便地操作speedbar

『1』下载
使用Sr Speedbar可以在Emacs中“造”出一个树形资源管理器。在这个页面下载到 sr-speedbar.el

『2』创建一个Emacs的load path
我在我放置Emacs插件的总目录 ~/.emacs.d/ 下创建了一个“extra”目录,用于放置其他我自己下载的插件,于是我把上面下载的 sr-speedbar.el 也放到这个extra目录下了。

『3』配置Emacs
修改 ~/.emacs 文件,添加如下两行:
  1. (add-to-list 'load-path "~/.emacs.d/extra/")
  2. (require 'sr-speedbar)
  3. (setq speedbar-show-unknown-files t)  
  4. (setq speedbar-use-images nil)  
  5. (setq sr-speedbar-width 30)  
  6. (setq sr-speedbar-right-side nil)  
  7.    
  8. (global-set-key (kbd "<f5>") (lambda()  
  9.                                (interactive)  
  10.                                (sr-speedbar-toggle)))  
复制代码

其中,第一句是将上面创建的extra目录加入到load-path中,这样Emacs启动时就会从extra目录加载插件。
第二句是加载 Sr Speedbar 插件。
文章来源:http://www.codelast.com/
『4』使用
非常简单。进入Emacs,输入:
  1. M - x sr-speedbar-
复制代码
然后按TAB进行自动补全,即可显示 Sr Speedbar 的全部命令。或参考官方网页获取全部命令。
最主要的命令就是 sr-speedbar-open 了,执行之后,会在窗口右边打开一个树形结构的资源管理器,把光标移动到其中,在哪一项上按回车,就可以打开哪一个文件/目录。



『5』感受
树形资源管理窗口显示在右边,不如左边方便(因人而异),而且某些目录下的文件(非隐藏的)竟然无法显示——只显示子目录,也不知道Sr Speedbar抽了什么风。所以整体感觉不好。
如上图所示,本来“article”目录下有三个 .txt 文件,一个子目录“test-directory”,但是它只显示了“test-directory”,没有显示三个 .txt 文件。
配色看不太清楚

使用
  • sr-speedbar-open
    打开sr-speedbar窗口
  • sr-speedbar-close
    关闭sr-speedbar窗口
  • sr-speedbar-toggle
    切换打开/关闭sr-speedbar窗口
  • sr-speedbar-select-window
    选中sr-speedbar窗口
  • sr-speedbar-refresh-turn-on
    开启自动刷新
  • sr-speedbar-refresh-turn-off
    关闭自动刷新
  • sr-speedbar-refresh-toggle
    切换开启/关闭自动刷新
4 定制
  • sr-speedbar-width-x
    图形界面下sr-speedbar窗口的宽度
  • sr-speedbar-width-console
    console界面下,sr-speedbar窗口的宽度
  • sr-speedbar-max-width
    允许存储的最大宽度,若设置sr-speedbar-width-x超过此宽度,则该值并不永久生效
  • sr-speedbar-delete-windows
    打开sr-speedbar时,是否移除其他的window
  • sr-speedbar-skip-other-window-p
    当使用命令`other-window`遍历window是,是否跳过‘sr-speedbar’ window
  • sr-speedbar-auto-refresh
    是否自动刷新sr-speedbar的内容
  • sr-speedbar-right-side
    nil表示sr-speedbar显示在左列, t表示显示在右列
5 QA当在Emacs24.4上加载sr-speedbar时,可能会报找不到函数ad-advised-definition-p,这时需要加上
  1. (defalias 'ad-advised-definition-p #'ad-advice-p)
复制代码


  • 当在Emacs24上,点击speedbar中的一个文件后,总是会弹出一个新window来打开这个文件,而不是在之前编辑的那个窗口中打开这个文件.
    设置`pop-up-windows'为nil可以解决这个问题
  • 如何设置让speedbar中不显示图标
    (setq speedbar-use-images nil)
  • 如何为speedbar设置自己的face
  1. (make-face 'speedbar-face)
  2. (set-face-font 'speedbar-face "Inconsolata-12")
  3. (setq speedbar-mode-hook '(lambda () (buffer-face-set 'speedbar-face)))
复制代码

https://www.emacswiki.org/emacs/SrSpeedbar#toc3
回复 支持 反对

使用道具 举报

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
地板
 楼主| 发表于 2017-9-12 12:58:15 | 只看该作者
修改配色方案 color-theme

下载地址:
   http://ftp.twaren.net/Unix/NonGNU/color-theme/color-theme-6.6.0.tar.gz

把主题下载下来后 解压,然后将文件夹整个复制到到我们的load-path中。


我们使用emacs打开我们的.emacs文件在该文件下加入以下代码:
  1. ;;================================
  2. ;;为我的emacs配置主题色彩 (color-theme-色彩名称)
  3. ;;================================
  4. (require 'color-theme)
  5. (color-theme-initialize)
  6. (color-theme-calm-forest)
复制代码
打开Emacs输入M-x命令,然后输入color-theme-select后选择。


回复 支持 反对

使用道具 举报

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
5#
 楼主| 发表于 2017-9-12 20:06:18 | 只看该作者
Emacs 中文手册
====================================================

[符号]
--------------------------------------
C-                    意思是按住 Ctrol 键
M-                    意指 Meta 键 (键盘上若无Meta 键,则可以ALT 或 ESC 键来取而代之)
DEL                   意指退格键 (不是 删除(Delete) key)
RET                   意指回车键
SPC                   意指空格键
ESC                   意指Escape键
TAB                   意指Tab键

像 "C-M-" (or "M-C") 这样连在一起的意味着同时按住 Control 和 Meta 键不放.
  
  
  
  
[进入Emacs]
----------------------------------------
emacs                 要进入GNU Emacs,只需键入它的名字         
C-z                   挂起Emacs:                        
C-x C-c               永久离开Emacs                       
  
  


[用方向键]
---------------------------------------

        上一行 C-p (Prev line)
                .
                .
                .                  
向左移 C-b .... 。.... 向右移 C-f (Forward character)
(Backward )   .
                .
                .
        下一行 C-n (Next line)



[文件]
----------------------------------------
C-x C-f                读取文件到Emacs
C-x r                  只读的方式打开一个文件
C-x C-q                清除一个窗口的只读属性                  
C-x C-s                保存文件到磁盘         
C-x s                  保存所有文件                        
C-x i                  插入其它文件的内容到当前缓冲            
C-x C-v                用将要读取的文件替换当前文件
C-x C-w                将当前缓冲写入指定的文件                 
C-x C-q                Version control checkin/checkout               




[错误恢复]
---------------------------------------
C-g                    取消当前要执行的命令                  
M-x recover-file       恢复系统崩溃后丢失的文件                 
C-x u或C-_             撤销更新                           
M-x revert-buffer      使缓冲回复到初始内容                  
C-l                    Redraw garbaged screen                 




[增量查找]
---------------------------------------
C-s                    向前查找                           
C-r                    向后查找                           
C-M-s                  规则表达式查找                       
C-M-r                  反向规则表达式查找                     
M-p                    选择前一个查找字符串                  
M-n                    选择下一个查找字符串                  
RET                    退出增量查找                        
DEL(Backspace)         取消上一个字符的作用                  
C-g                    退出当前查找模式                     
                       可重复使用C-s和C-r来改变查找方向
                       

[替换]
---------------------------------------
M-%                    交互式地替换一个文本串                 
M-x replace-regexp     交互式地替换一个规则表达式               
SPE                    替换当前的并移动到下一处                 
,                      替换当前的但不移动到下一处               
L(Backspace)           不替换当前的并移动到下一处               
!                      替换所有剩下的符合条件的文本            
RET                    退出替换模式                        
C-r                    进入递归的编辑模式                     
C-M-c                  退出递归的编辑模式                     




[光标移动]
---------------------------------------
C-f                    向前一个字符                        
C-b                    向后一个字符                        
M-f                    向前一个字                        
M-b                    向后一个字                        
C-p                    向上一行                           
C-n                    向下一行                           
C-a                    到行首                             
C-e                    到行尾                             
M-a                    到句首                             
M-e                    到句尾                             
M-{                    到段首                             
M-}                    到段尾                             
C-x [                  到页首                             
C-x ]                  到页尾                             
C-M-f                  到表达式首部                        
C-M-b                  到表达式尾部
M-<                    到缓冲首部                        
M->                    到缓冲尾部                        
C-v                    滚动到下一屏                        
M-v                    滚动到上一屏                        
C-x <                  滚动到右边一屏(内容向左移动)            
C-x >                  滚动到左边一屏(内容向右移动)            
C-u C-l                滚动当前行到屏幕中央

C-M-n                  移到结尾的)、}或]
C-M-p                  移到开始的)、}或]
C-M-u                  向上移到父结构开始
C-M-d                  向下移到父结构开始



[复制、粘贴、剪切、删除]
-----------------------------
C-d                    向前delete字符                       
DEL(Backspace)         向后delete字符                       
M-d                    向前delete到字首                     
M-DEL(Backspace)       向后delete到字尾                     
M-0 C-k                向前delete到行首                     
C-k                    向后delete到行尾                     
C-x DEL(Backspace)     向前delete到句首                     
M-k                    向后delete到句尾                     
M-- C-M-k              向前delete到表达式首部                 
C-M-k                  向后delete到表达式尾部                 
C-w                    Kill区域                           
M-w                    拷贝区域到Kill Ring                     
M-z <char>             Kill到下一个给定字符出现的位置            
C-y                    拉回(yank)上次kill的内容               
M-y                    用更早kill的内容取代拉回的上次kill的内容     



[标记Marking]
-----------------------------
C-SPC或C-@             标记当前位置                        
C-x C-x                以字符为单位使用移动命令动态标记区域         
M-@                    以字为单位使用移动命令动态标记区域         
M-h                    标记一段                           
C-x C-p                标记一页                           
C-M-@                  标记一个表达式                       
C-M-h                  标记一个函数                        
C-x h                  标记整个缓冲区                       


[寄存器]
-----------------------------
C-x r s                存储区域到寄存器                     
C-x r i                插入矩形内容到缓冲                     
C-x r SPC <num>        存储光标位置到寄存器                  
C-x r j <num>         跳跃到寄存器中存储的光标位置            



[矩形]
-----------------------------
C-x r r                拷贝一个矩形到寄存器                  
C-x r k                Kill矩形                           
C-x r y                拉回矩形                           
C-x r o                打开一个矩形, 将文本移动至右边            
C-x r c                清空矩形                           
C-x r t                为矩形中每一行加上一个字符串前缀
C-x r i r              从r缓冲区内插入一个矩形           






[标记Tags]
-----------------------------
M-.                    查找标记                           
C-u M-.                查找标记下一次出现的位置                 
M-x visit-tags-table   指定一个新的标记文件                  
M-x tags-search        Regexp search on all files in tabs table           
M-x tags-query-replace 在所有文件中执行查询-替换               
M-,                    继续进行上一次标记查找或查询-替换           





[窗口与缓冲]
-----------------------------
C-x 1                  删除所有其它窗口

C-x 5 2                     
C-x 2                  上下分割当前窗口
                     
C-x 3                  左右分割当前窗口

C-x 5 0                    
C-x 0                  删除当前窗口   
                     
C-M-v                  滚动其它窗口                        
C-x o                  切换光标到另一个窗口                  
C-x 4 b C-x 5 b        选择另一个窗口中的缓冲

C-x 5 C-o                 
C-x 4 C-o              显示另一个窗口中的缓冲

C-x 5 f               
C-x 4 f                在另一窗口中查找并打开文件               

C-x 5 r
C-x 4 r                在另一窗口中以只读方式打开文件            

C-x 5 d
C-x 4 d                在另一窗口中运行dired命令  

C-x 5 .            
C-x 4 .                在另一窗口中查找tag
                  
C-x ^                  增加窗口高度                        
C-x {                  减小窗口宽度                        
C-x }                  增加窗口宽度                        


C-x b                  选择另一个缓冲                       
C-x C-b                列出所有的缓冲                       
C-x k                  Kill一个缓冲                        


[分栏编辑]

C-x 6                 2C-command
C-x 6 s                  2C-split
C-x 6 b    2             C-associate-buffer
C-x 6 2    2             C-two-columns



[格式]
-----------------------------
TAB                    缩进当前行(与模式相关)                 
C-M-\                  缩进区域(与模式相关)               
C-M-q                  缩进表达式(与模式相关)                 
C-x TAB                Indent region rigidly arg. Columns            
C-o                    在光标后插入一个新的行                 
C-M-o                  静态地将一行下移                     
C-x C-o                删除光标附近的空行(留下一行)            
M-^                    与上一行合并成一行                     
M-                     删除光标附近的所有空格                 
M-SPC                  删除光标附近的空格(留下一格)            
M-q                    Fill paragraph                        
C-x f                  Set fill column                        
C-x .                  设置每一行开始的前缀                  
M-g                    设置字体   


http://blog.chinaunix.net/uid-1877180-id-303189.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-26 23:00 , Processed in 0.069941 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表