首页 > DEA, 中级, 配置 > 我的Emacs配置文件 - DEA

我的Emacs配置文件 - DEA

2009年11月11日 ahei 发表评论 阅读评论

DEA是Dot Emacs of Ahei的简写。由于我的emacs配置文件比较大,我把它放到google code上去了,详情请见:DEA。我会不定期发布release版本,不过你大可放心使用trunk版本,我更新的很及时,遇到bug正好告诉我,:)。其他文章中的配置均来之与此。

1 兼容性

DEA兼容:

  • 部分兼容Emacs 21(以前兼容,我现在不使用Emacs 21了,所以可能有不兼容的情况)
  • Emacs 22, 23.1, 23.2
  • Emacs linux版本(我在Ubuntu下使用Emacs)
  • Emacs windows版本
  • Emacs GUI版本
  • Emacs字符模式版本

2 安装

  • linux

    1
    2
    3
    4
    
    apt-get install gnuserv # (emacs 21及其以下版本需要安装)
    svn checkout http://dea.googlecode.com/svn/trunk/ dea-read-only # (或者下载Downloads页面的release,不过不是最新的)
    cd dea-read-only
    ./install.sh

    安装的时候, 会先根据.emacs文件生成一个.emacs.changed文件,因为.emacs文件中会用到一些与.emacs文件所在文件夹相关的变量,然后在HOME目录建立一个.emacs.changed的软链接(ln -sf CURDIR/.emacs.changed ~/.emacs), 如果HOME目录下已经存在.emacs文件, install.sh会把它备份到~/.emacs.CURRENTDATETIME. 所以, 如果你更新的时候是用svn up更新的话,还要执行一下 $ install.emacs.sh, 重新生成HOME下的.emacs.另外install.sh还会解压lisps目录下的压缩包.

  • windows
    windows用户请使用cygwin执行上述安装命令, 或者设置好了HOME目录后,把DEA放到HOME后下,并且重命名为emacs,把lisps目录下的tar包都解压,然后新建一个emacs.bat,输入以下内容:

    fullpath-of-runemacs.exe -q -l ~/emacs/.emacs
    

    以后启动Emacs执行emacs.bat即可。

3 更新

1
2
cd dea-read-only
./update.sh

windows下直接用svn客户端更新即可。

4 修改

修改完.emacs后需要运行 $ ./install.emacs.sh, 或者退出emacs的时候,会自动运行$ ./install.emacs.sh

5 目录结构

  • lisps 主要存放一些非Emacs内置的Elisp包
  • my-lisps 我自己写的Elisp包和其他Elisp包的配置

6 DEA体积

1
2
3
4
5
6
7
8
ahei@ahei-ubuntu:~/DEA$ du -sh
53M .
ahei@ahei-ubuntu:~/DEA$ du -sh my-lisps/
1016K   my-lisps/
ahei@ahei-ubuntu:~/DEA/my-lisps$ find -type f | wc -l
185
ahei@ahei-ubuntu:~/DEA/my-lisps$ find -type f | xargs wc -l | tail -1
 13951 total

7 注意

  • 不建议初学者直接使用DEA,初学者请看这里
  • 不要用apt-get安装cedet, DEA里面已自带cedet的cvs版.
  • 其他问题请看DEA的FAQs

8 Emacs默认快捷键修改

由于一些Emacs默认的快捷键个人觉得不是很方便,做了一些修改,主要是:

  • C-h

    Emacs中默认的C-h是帮助快捷键的prefix,我把它绑定到了删除前面一个字符,这样删除字符就非常方便了。
  • DEA中查看文档的快捷键如下:

    • 查看变量和函数的文档

      C-x C-/
    • 查看某个快捷键对应的命令

      C-x C-k
    • 查看某个命令对应的快捷键

      C-x / w
    • 查看当前buffer中以某个快捷键序列开头的快捷键列表

      <待查看的快捷键序列> C-x /,比如你想查看当前buffer中所有以C-c开头的快捷键列表,按C-c C-x /就可以了。
    • 查看函数和变量的代码

      C-x C-d
  • C-k

    Emacs默认的是删除光标当行尾,我改成了删除整行
  • C-w

    Emacs默认的是剪切region,即使mark没有激活, 我改了后,mark没有激活的话,就向后删除一个单词,激活则剪切region
  • M-w

    Emacs默认的是拷贝region,即使mark没有激活, 我改了后,mark没有激活的话,就复制本行,激活的话则拷贝region
  • C-x C-s绑定到了save-buffer-sb

9 非常方便的编辑功能

  • M-w smart-copy region状态下,拷贝region,否则拷贝当前行, 还可以拷贝矩阵region
  • C-k 删除一行

    M-K 删除当前光标到行尾
  • C-w 在region状态下, 剪切当前region, 否则向后删除一个单词, 非常之方便
  • C-x M-w 复制一行并粘贴到下一行

    M-W 复制region并粘贴到下面

    C-x M-W 复制一个sexp并粘贴到下面

    相信很多程序员都有拷贝现成代码并复制下来,然后经过小的修改(当然这种方法不是一个好的方法), 这时候这个命令就显的非常有用了
  • C-x w 复制一个sexp

    C-x W 删除一个sexp

    M-D 删除当前光标所处的单词

    C-x S 选择一个sexp

我配置后的emacs截图在http://emacser.com/emacs.htm][这里]](有些截图是别的作者和网友的,请读者自行分辨, :) )。

下面是我的.emacs文件, .emacs文件用到的其他文件在这里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
;; -*- Emacs-Lisp -*-
 
;; Time-stamp: <2010-05-06 10:18:12 Thursday by ahei>
 
(defconst my-emacs-path           "~/emacs/" "我的emacs相关配置文件的路径")
(defconst my-emacs-my-lisps-path  (concat my-emacs-path "my-lisps/") "我自己写的emacs lisp包的路径")
(defconst my-emacs-lisps-path     (concat my-emacs-path "lisps/") "我下载的emacs lisp包的路径")
(defconst my-emacs-templates-path (concat my-emacs-path "templates/") "Path for templates")
 
;; 把`my-emacs-lisps-path'的所有子目录都加到`load-path'里面
(load (concat my-emacs-my-lisps-path "my-subdirs"))
(my-add-subdirs-to-load-path my-emacs-lisps-path)
(my-add-subdirs-to-load-path my-emacs-my-lisps-path)
 
;; 一些基本的小函数
(require 'ahei-misc)
 
;; 利用`eval-after-load'加快启动速度的库
;; 用eval-after-load避免不必要的elisp包的加载
;; http://emacser.com/eval-after-load.htm
(require 'eval-after-load)
 
(require 'util)
 
;; 一些Emacs的小设置
(require 'misc-settings)
 
;; 编码设置
(require 'coding-settings)
 
;; CUA的矩阵区域操作特别方便
(require 'cua-settings)
 
;; 矩形区域操作
(require 'rect-mark-settings)
 
;; 鼠标配置
(require 'mouse-settings)
 
;; 关于mark的一些设置,使你非常方便的选择region
(require 'mark-settings)
 
;; `mode-line'显示格式
(require 'mode-line-settings)
 
;; ffap,打开当前point的文件
(require 'ffap-settings)
 
;; 各种语言开发方面的设置
(require 'dev-settings)
 
;; 不要menu-bar和tool-bar
;; (unless window-system
;;   (menu-bar-mode -1))
(menu-bar-mode -1)
;; GUI下显示toolbar的话select-buffer会出问题
(if (fboundp 'tool-bar-mode)
    (tool-bar-mode -1))
 
;; 打开压缩文件时自动解压缩
;; 必须放在session前面
(auto-compression-mode 1)
 
;; 所有关于buffer方面的配置
(require 'all-buffer-settings)
 
;; frame-cmds.el必须放在multi-term前面,否则ediff退出时会出现错误
;; 而icicles soft-requires frame-cmds.el, 所以icicles也必须放在multi-term前面
;; emacs22下也必须放在kde-emacs前面, 否则会说shell-command是void-function
;; http://emacser.com/icicles-doremi-palette.htm
(require 'icicles-settings)
(require 'doremi-settings)
(require 'palette-settings)
 
;; edit-settings中对M-w重新定义,但是kde-emacs中也对其定义了
;; 所以必须要放在kde-emacs后面
(require 'edit-settings)
 
;; 用M-x执行某个命令的时候,在输入的同时给出可选的命令名提示
(require 'icomplete-settings)
 
;; minibuffer中输入部分命令就可以使用补全
(unless is-after-emacs-23
  (partial-completion-mode 1))
 
;; 图片mode
(require 'image-mode-settings)
 
;; 用一个很大的kill ring. 这样防止我不小心删掉重要的东西
(setq kill-ring-max 200)
 
;; 方便的在kill-ring里寻找需要的东西
(require 'browse-kill-ring-settings)
 
;; 显示行号
(require 'linum-settings)
 
;; color theme Emacs主题
(require 'color-theme-settings)
 
(require 'ahei-face)
(require 'color-theme-ahei)
(require 'face-settings)
 
;; 高亮当前行
(require 'hl-line-settings)
 
(when (and window-system is-after-emacs-23)
  (require 'my-fontset-win)
  (if mswin
      (huangq-fontset-courier 17)
    ;; (huangq-fontset-dejavu 17)))
    (huangq-fontset-fixedsys 17)))
 
;; diff
(require 'diff-settings)
 
;; ediff
(require 'ediff-settings)
 
;; 最近打开的文件
(require 'recentf-settings)
 
;; color-moccur
(require 'moccur-settings)
 
;; Emacs超强的增量搜索Isearch配置
(require 'isearch-settings)
 
;; 非常酷的一个扩展。可以“所见即所得”的编辑一个文本模式的表格
(if is-before-emacs-21 (require 'table "table-for-21"))
 
;; 把文件或buffer彩色输出成html
(require 'htmlize)
 
;; time-stamp, 在文件头记录修改时间
(require 'time-stamp-settings)
 
;; Emacs可以做为一个server, 然后用emacsclient连接这个server,
;; 无需再打开两个Emacs
(require 'emacs-server-settings)
 
(require 'apropos-settings)
(require 'completion-list-mode-settings)
 
;; 显示ascii表
(require 'ascii)
 
;; 所有关于查看帮助方面的配置
(require 'all-help-settings)
 
;; 定义一些emacs 21没有的函数
(if is-before-emacs-21 (require 'for-emacs-21))
 
;; 简写模式
(setq-default abbrev-mode t)
(setq save-abbrevs nil)
 
;; 可以为重名的buffer在前面加上其父目录的名字来让buffer的名字区分开来,而不是单纯的加一个没有太多意义的序号
(require 'uniquify)
(setq uniquify-buffer-name-style 'forward)
 
;; 以目录形式显示linkd文档
(require 'linkd-settings)
 
;; Emacs的超强文件管理器
(require 'dired-settings)
 
;; 方便的切换major mode
(defvar switch-major-mode-last-mode nil)
 
(defun major-mode-heuristic (symbol)
  (and (fboundp symbol)
       (string-match ".*-mode$" (symbol-name symbol))))
 
(defun switch-major-mode (mode)
  "切换major mode"
  (interactive
   (let ((fn switch-major-mode-last-mode) val)
     (setq val
           (completing-read
            (if fn (format "切换major-mode为(缺省为%s): " fn) "切换major mode为: ")
            obarray 'major-mode-heuristic t nil nil (symbol-name fn)))
     (list (intern val))))
  (let ((last-mode major-mode))
    (funcall mode)
    (setq switch-major-mode-last-mode last-mode)))
(global-set-key (kbd "C-x q") 'switch-major-mode)
 
(defun get-mode-name ()
  "显示`major-mode'及`mode-name'"
  (interactive)
  (message "major-mode为%s, mode-name为%s" major-mode mode-name))
(global-set-key (kbd "C-x m") 'get-mode-name)
 
;; 查看Emacs内进程
(autoload 'list-processes+ "list-processes+" "增强的`list-processes'命令" t)
 
(require 'view-mode-settings)
 
(defun revert-buffer-no-confirm ()
  "执行`revert-buffer'时不需要确认"
  (interactive)
  (when (buffer-file-name)
    (let ((emaci emaci-mode))
      (revert-buffer buffer-file-name t)
      (emaci-mode (if emaci 1 -1)))))
(global-set-key (kbd "C-x u") 'revert-buffer-no-confirm)
 
(defun count-brf-lines (&optional is-fun)
  "显示当前buffer或region或函数的行数和字符数"
  (interactive "P")
  (let (min max)
    (if is-fun
        (save-excursion
          (beginning-of-defun) (setq min (point))
          (end-of-defun) (setq max (point))
          (message "当前函数%s内共有%d行, %d个字符" (which-function) (count-lines min max) (- max min)))
      (if mark-active
          (progn
            (setq min (min (point) (mark)))
            (setq max (max (point) (mark))))
        (setq min (point-min))
        (setq max (point-max)))
      (if (or (= 1 (point-min)) mark-active)
          (if mark-active
              (message "当前region内共有%d行, %d个字符" (count-lines min max) (- max min))
            (message "当前buffer内共有%d行, %d个字符" (count-lines min max) (- max min)))
        (let ((nmin min) (nmax max))
          (save-excursion
            (save-restriction
              (widen)
              (setq min (point-min))
              (setq max (point-max))))
          (message "narrow下buffer内共有%d行, %d个字符, 非narrow下buffer内共有%d行, %d个字符"
                   (count-lines nmin nmax) (- nmax nmin) (count-lines min max) (- max min)))))))
(eal-define-keys-commonly
 global-map
 `(("C-x l" count-brf-lines)
   ("C-x L" (lambda () (interactive) (count-brf-lines t)))))
 
;; 增加更丰富的高亮
(require 'generic-x)
 
(defun switch-to-scratch ()
  "切换到*scratch*"
  (interactive)
  (let ((buffer (get-buffer-create "*scratch*")))
    (switch-to-buffer buffer)
    (unless (equal major-mode 'lisp-interaction-mode)
      (lisp-interaction-mode))))
(global-set-key (kbd "C-x s") 'switch-to-scratch)
 
(defun visit-.emacs ()
  "访问.emacs文件"
  (interactive)
  (find-file (concat my-emacs-path ".emacs")))
(global-set-key (kbd "C-x E") 'visit-.emacs)
 
;; grep
(require 'grep-settings)
 
;; ack-grep, grep纯perl的代替品
(require 'full-ack-settings)
 
;; 可以显示空白,tab
(require 'blank-mode)
 
(eal-define-keys-commonly
 global-map
 `(("M-r"     query-replace-sb)
   ("M-%"     query-replace-sb)
   ("ESC M-%" query-replace-regexp-sb)
   ("ESC M-r" query-replace-regexp-sb)
   ("C-x M-r" query-replace-regexp-sb)
   ("M-z"     zap-to-char-sb)
   ("C-j"     goto-line)
   ("C-x C-s" save-buffer-sb)))
 
(am-add-hooks
 `(find-file-hook)
 (lambda ()
   (local-set-key (kbd "C-M-j") 'goto-line)))
 
;; 返回到最近去过的地方
(require 'recent-jump-settings)
 
;; 统计命令使用频率
(require 'command-frequence)
 
;; Emacs中的文本浏览器w3m
;; http://emacser.com/w3m.htm
(require 'w3m-settings)
 
;; 以另一用户编辑文件, 或者编辑远程主机文件
(require 'tramp-settings)
 
;; erc: Emacs中的IRC
;; ERC使用简介 emacser.com/erc.htm
(require 'erc-settings)
 
;; spell check
(setq-default ispell-program-name "aspell")
 
(define-key global-map (kbd "C-q") 'quoted-insert-sb)
 
;; Emacs中的包管理器
(require 'package)
(package-initialize)
 
(require 'auto-install)
(setq auto-install-directory (concat my-emacs-lisps-path "auto-install"))
 
(unless mswin
  (defun install-.emacs ()
    (interactive)
    (shell-command (concat my-emacs-path "install.emacs.sh")))
 
  (add-hook 'kill-emacs-hook 'install-.emacs))
 
;; 把pdf,ps,dvi文件转换为png格式, 在Emacs里面浏览
(if is-after-emacs-23
  (require 'doc-view)
  (setq doc-view-conversion-refresh-interval 3))
 
;; 在Emacs里面使用shell
(require 'term-settings)
(require 'multi-term-settings)
 
(require 'anything-settings)
 
(require 'ioccur)
 
;; 查询天气预报
(require 'weather-settings)
 
;; 可以把光标由方块变成一个小长条
(require 'bar-cursor)
 
(defun goto-my-emacs-lisps-dir ()
  "Goto `my-emacs-lisps-path'."
  (interactive)
  (dired my-emacs-lisps-path))
(defun goto-my-emacs-my-lisps-dir ()
  "Goto `my-emacs-my-lisps-path'."
  (interactive)
  (dired my-emacs-my-lisps-path))
(defun goto-my-emacs-dir ()
  "Goto `my-emacs-path'."
  (interactive)
  (dired my-emacs-path))
(defun goto-my-home-dir ()
  "Goto my home directory."
  (interactive)
  (dired "~"))
(define-key-list
 global-map
 `(("C-x G l" goto-my-emacs-lisps-dir)
   ("C-x G m" goto-my-emacs-my-lisps-dir)
   ("C-x G e" goto-my-emacs-dir)
   ("C-x M-H" goto-my-home-dir)))
 
(define-key global-map (kbd "C-x M-c") 'describe-char)
 
;; 启动Emacs的时候最大化Emacs
(require 'maxframe-settings)
 
(apply-args-list-to-fun
 `def-execute-command-on-current-file-command
  `("dos2unix" "unix2dos"))
(define-key global-map (kbd "C-x M-D") 'dos2unix-current-file)
 
(define-key-list
 global-map
 `(("C-x M-k" Info-goto-emacs-key-command-node)
   ("C-x ESC ESC" repeat-complex-command-sb)))
 
;; Emacs才是世界上最强大的IDE - 智能的改变光标形状
;; http://emacser.com/cursor-change.htm
(require 'cursor-change)
(cursor-change-mode 1)
 
(defun copy-file-name (&optional full)
  "Copy file name of current-buffer.
If FULL is t, copy full file name."
  (interactive "P")
  (let ((file (buffer-name)))
    (if full
        (setq file (expand-file-name file)))
    (kill-new file)
    (message "File `%s' copied." file)))
(eal-define-keys
 `(emacs-lisp-mode-map lisp-interaction-mode-map java-mode-map sh-mode-map
                       c-mode-base-map text-mode-map ruby-mode-map html-mode-map
                       java-mode-map conf-javaprop-mode-map)
 `(("C-c M-C" copy-file-name)))
 
;; notification tool
(require 'todochiku-settings)
 
;; twitter client
(require 'eagle-settings)
(require 'twit-settings)
 
;; 模拟vi的点(.)命令
(require 'dot-mode)
 
;; 用渐变颜色显示你最近的修改
;; http://emacser.com/highlight-tail.htm
;; 与semantic冲突,启动了它后,打开大文件的时候,会发现buffer大范围的刷屏
;; (require 'highlight-tail-settings)
 
;; Emacs才是世界上最强大的IDE - 用Emaci阅读文件
;; http://emacser.com/emaci.htm
(require 'emaci-settings)
 
;;;###autoload
(defun update-current-file-autoloads (file &optional save-after)
  "`update-file-autoloads' for current file."
  (interactive "fUpdate autoloads for file: \np")
  (let* ((load-file (expand-file-name "loaddefs.el"))
         (generated-autoload-file load-file))
    (unless (file-exists-p load-file)
      (shell-command (concat "touch " load-file)))
    (update-file-autoloads file save-after)))
 
;; org是一个非常强大的GTD工具
(require 'org-settings)
 
;; 用weblogger写WordPress博客
;; http://emacser.com/weblogger.htm
(require 'weblogger-settings)
 
;; session,可以保存很多东西,例如输入历史(像搜索、打开文件等的输入)、
;; register的内容、buffer的local variables以及kill-ring和最近修改的文件列表等。非常有用。
(require 'session-settings)
 
;; 王纯业的desktop, 比desktop快多了
(require 'wcy-desktop-settings)
 
;; HACK: 要放在最后,免得会出现比较奇怪的现象
;; 保存和恢复工作环境
;; desktop,用来保存Emacs的桌面环境 — buffers、以及buffer的文件名、major modes和位置等等
;; (require 'desktop-settings)
 
(sb-update)

分享家:Addthis中国
GD Star Rating
loading...
我的Emacs配置文件 - DEA, 8.0 out of 10 based on 2 ratings 标签:ahei, autoload, CEDET, cursor, cursor-change, doremi, ede, ediff, emaci, Emacs, emacser, emacser.com, erc, eval-after-load, face, highlight, highlight-tail, icicle, icicles, IDE, irc, lambda, mode-line, org, palette, scratch, screenshot, select-buffer, semantic, term, theme, ubuntu, weblogger, windows, 光标, 截图, 浏览器, 王纯业, 看文档, 行号, 补全, 配色, 配色, 颜色, 鼠标

相关日志

分类: DEA, 中级, 配置
  1. black_fire
    2010年7月20日08:24 | #1

    black_fire :

    black_fire :
    我是初学, 请问一下vim下可以实现 某一段之间的修改, 如替换从第一行到第5行间的test成tset
    :1,5s/test/tset
    emacs下面有类似的实现吗?
    谢谢
    [回复]ahei 回复:七月 20th, 2010 at 5:26 上午@black_fire, M-x query-replace, 可以学学Emacs, 致Emacs初学者
    [回复]

    谢谢你的回复 我的理解 M-x query-replace是全局的查找 ,交互的替换, 如果文件很大的话, 可能会很麻烦
    我的重点是:
    vim 里面的 :line_number1, line_number2 是指定某个范围, 后面可以定义执行的编辑操作
    emacs里面有这们类似的用法吗? 谢谢
    [回复]

    我现在用的方法是先选中, mark我需要编辑的部份,然后使用M-x replace之类的操作来做的 不知道有没有快捷的选择方案, 像VIM里面直接指定某两行这间这一部份 :)

    [回复]

    ahei 回复:

    @black_fire, 呵呵,个人觉得region不是很大的话交互操作比你输数字要快吧

    [回复]

  2. black_fire
    2010年7月20日08:33 | #2

    black_fire :

    black_fire :

    black_fire :
    我是初学, 请问一下vim下可以实现 某一段之间的修改, 如替换从第一行到第5行间的test成tset
    :1,5s/test/tset
    emacs下面有类似的实现吗?
    谢谢
    [回复]ahei 回复:七月 20th, 2010 at 5:26 上午@black_fire, M-x query-replace, 可以学学Emacs, 致Emacs初学者
    [回复]

    谢谢你的回复 我的理解 M-x query-replace是全局的查找 ,交互的替换, 如果文件很大的话, 可能会很麻烦
    我的重点是:
    vim 里面的 :line_number1, line_number2 是指定某个范围, 后面可以定义执行的编辑操作
    emacs里面有这们类似的用法吗? 谢谢
    [回复]

    我现在用的方法是先选中, mark我需要编辑的部份,然后使用M-x replace之类的操作来做的 不知道有没有快捷的选择方案, 像VIM里面直接指定某两行这间这一部份
    [回复]ahei 回复:七月 20th, 2010 at 8:28 上午@black_fire, 呵呵,个人觉得region不是很大的话交互操作比你输数字要快吧
    [回复]


    以前都用vim现在到emacs里面不能用以前习惯了的操作, 还是有些不习惯的

    [回复]

    ahei 回复:

    @black_fire, 两个理念非常不同的编辑器,你想不改变,基本不太可能,想用好Emacs, 就要去习惯它的理念, 不要试图把Emacs变成vi, 不过在Emacs下可以用multi-term来直接操作term,然后可以在term里用vi, 或者用viper-mode来用vi, 还有好多其他的模仿vi的mode

    [回复]

    black_fire 回复:

    @ahei,
    嗯 确实是还刚刚开始用emacs ,
    不过, 真不打算在emacs下面用vi, 有问题再向你请教 :) 谢谢

    [回复]

  3. li
    2010年7月21日16:13 | #3

    请问,我想让左边出来资源管理器,要怎么配???多谢!

    [回复]

    ahei 回复:

    @li, 你可以试试CEDET的speedbar

    [回复]

    匿名 回复:

    @ahei, 你说的这个好像不是我要的,我要的左边的文件浏览器那种,可以浏览本机上的目录和文件

    [回复]

    ahei 回复:

    @, 那个不行吗?我貌似记得可以的啊,如果不行的话,我就不知道了,我基本都是单窗口操作的,很方便,建议使用Emacs不要把Emacs打扮成其他的IDE

    [回复]

评论分页
1 ... 3 4 5 34209
  1. 2010年5月9日07:41 | #1
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: