感觉emacs没有vim简洁

差别:

    1. vim 编辑上一行直接 大写的 O , 搞定, 下面一行直接小写的 o, 搞定. emacs 确总是需要手动起一行
    1. vim 的纵向选择, 很有用~ , 百度 emacs 的这个功能, 发现并没有… 请问大神们这个能实现么

PS: 我本人无论是 vim 还是 emacs --------------------------------- 都是个渣!

用上evil就都有了,其实我是先学的emacs,然后用emacs学的Vim_(:3」∠)_

3 个赞

因为vim是模式编辑器,所以在不同的模式下相同的输入可以代表不同的命令,各个模式处于不同的命令空间; 而emacs是没有所谓的模式的,所以都在同一个命令空间中,想区别各个命令就必须加上复杂的前缀; 只能说两者的设计思想不一样,vim是为了打造一个好用的编辑器,而emacs是为了打造一个统一的平台。 另外,vim是emacs下最好的编辑器:heart_eyes:

4 个赞

把vim跑在emacs下,yeah

2 个赞

:scream:还能这么玩?

晓得了, 不过 emacs 学好后, 真的比 atom 啥的编辑器好使么, 目前看了紫龙兄的视频五天, 感觉还是不如编辑器, 但是我很喜欢 emacs 的移动方式, 个人及其厌恶上下左右键…

听起来我还有很长的路要走…

试试 spacemacs

1 个赞

我还是个菜, 打算先跟紫龙的教程走走~ 等足够了解了再去做别的尝试吧~ thx you

其实我觉得重要的是插入空行而不进入插入模式。 以及给多行添加注释。

多行注释? 有什么区别么

多问不如自己多试。另外建议使用别人做好的配置文件,等你熟悉了再重新造轮子

就这个啊 evil也可以做到。

要做配置,先对着spacemacs改造自己的vim配置,然后对着vim创建自己更加习惯的emacs配置。

1 个赞

:scream:你们真是机智, 不过我 emacs 和 vim 都比较渣, 准备慢慢来, 马上要看到 evil 了 :grimacing:

我倒是写过一个函数来这么做:

;; 在普通模式下在下一行增加一个空行,但光标不移动也不进入插入模式
(define-key evil-normal-state-map (kbd "C-S-o")
  (lambda ()
    (interactive)
    (save-excursion
      (evil-open-below 1)
(evil-normal-state))))

不过目前绑定的按键是 C-S-O,感觉用手去找 ctrl 和 shift 的时间和直接按 o ESC 的时间差不多了_(:зゝ∠)_

emacs 默认的编辑方式确实没有 vim 高效,然而它的无敌的扩展性使得它可以变成 vim (准确的说是使用 vim 的编辑方式),evil 就是这样产生的。

用emacs or vim 还是编辑器atom or sublime,都是看个人习惯的,他们都可以实现绝大多数程序的编写,每一个人使用不同的编辑器,一定是因为他们对其某一项特性特别钟爱。比如emacs和vim的*nix通用性,终端编辑能力。atom和sublime的插件拓展方便,不像emacs和vim配置起来比较麻烦。而且选择编辑器很大程度上和每个人的主语言有一定关系。比如atom是node.js写的脚本,sublime是python写插件,对这两种语言本身已经很熟悉的人,会偏爱这两种ide,vim脚本更偏向于shell,运维人员一定爱不释手。emacs不容易推广的原因就是elisp不是必要语言,而且学习模式和C模式的语言有很大差别。而如果是java开发者,必然会选择eclipse和idea,而C#程序员一定用VS,因为无论emacs/vim/atom/sublime再怎么配置都很难达到这两个重型IDE的功能。

4 个赞

C-o 就能实现这个功能 (open-line

用vim两年后,Emacs一周就熟了。而且Elisp比VimScript简单好用,看着API就能尝试自己做一些扩展。从这个层面上是 Emacs 比 Vim 简单的,况且“简洁”一方面要看软件,另一方便是要看使用者,有些人想让 编辑器做更多的事情,常常会把问题的复杂程度提升到难以想象的地步。

任何简洁的东西都可能会被以一种偏颇的方式复杂的来使用。

Vim 的编辑方式不见得比 Emacs 高效。***使用 Emacs 的 思路是,把常用的功能绑定到按键上,使用频率低的功能用 ido 或者其他插件 交互式调用。***很多人还是用 Vim 的思路来,想把所有功能都绑定到 按键上,其实是不对的。这里是我配置里一些比较好的键位绑定。***一般的 C-c 是mode的相关功能,C-x一般是全局的功能,比如窗口,buffer,undo-tree等,当然也会有特殊情况,对于大多数情况,这样的键位设计已经足够紧凑了。***(Vim 里的 leader 键也是 prefix-key,和 C-c、C-x 没区别。

;;; better default
;; 对换正则搜索和普通搜索
(global-set-key (kbd "C-s") 'isearch-forward-regexp)
(global-set-key (kbd "C-r") 'isearch-backward-regexp)
(global-set-key (kbd "C-M-s") 'isearch-forward)
(global-set-key (kbd "C-M-r") 'isearch-backward)
(global-set-key (kbd "M-[") 'backward-paragraph)
(global-set-key (kbd "M-]") 'forward-paragraph)

;; resize window
(global-set-key (kbd "<up>") 'shrink-window)
(global-set-key (kbd "<down>") 'enlarge-window)
(global-set-key (kbd "<left>") 'shrink-window-horizontally)
(global-set-key (kbd "<right>") 'enlarge-window-horizontally)

;; occur
(global-set-key (kbd "C-c o") 'multi-occur-in-matching-buffers)

;; org-agenda
(global-set-key (kbd "C-c a") 'org-agenda)

...

;;; undo tree
(use-package undo-tree
:diminish undo-tree-mode
:init
(undo-tree-mode)
:config
;; undo-tree-visual
(global-set-key (kbd "C-x u") 'undo-tree-visualize))

对于光标的移动,我使用了两个插件 一个是 jump-char,对应于 Vim 中的 f,F 键,更强的跳转 用 ace-jump-mode,这两个插件都很老了。现在可能有不那么 “简洁” 的插件,也能做类似的事情。推荐另一个很老的插件 smart-scan,可以用 M-n,M-p 在相同符号间快速跳转,还可以重构文件内的相同符号(Meta 前缀的一般是抽象程度更高的文本单位,C-f, C-b 是前后子符,M-f,M-b 是前后单词等等)。

此外也可以用 搜索的方式 跳转,就像在Vim里用 ‘/’ 搜索后,按 n或者S-n 一样(如上所说使用 smart-scan 后,按 M-n,M-p 就可以了)。

;;; jump mode
(global-set-key (kbd "C-z") 'jump-char-forward)
(global-set-key (kbd "C-S-z") 'jump-char-backward)

;;; ace jump mode
(define-key global-map (kbd "C-c SPC") 'ace-jump-mode)
(define-key global-map (kbd "C-x SPC") 'ace-jump-mode-pop-mark)

如果跳转之后,想回到之前“编辑过”的地方,Vim 里有 jumplist,很好办;同样 Emacs 里有 mark-ring 也很方便,这里有人封装了一下 mark-ring 做成了插件 goto-last-change

;;; goto last change
(global-set-key (kbd "C-x C-/") 'goto-last-change)

C-/ 是undo,C-x u 是undo tree,C-x C-/ 是回到上次编辑的地方,按键绑定很紧凑,所以很方便记忆,一些人用 F1,F2,F3,F5 来绑定的功能基本可以 按 M-x 交互式调用。

;; config eshell
(use-package shell-pop
  :config
  (custom-set-variables
   '(shell-pop-shell-type (quote ("ansi-term" "*ansi-term*" (lambda nil (ansi-term shell-pop-term-  shell)))))
   '(shell-pop-term-shell "/bin/zsh")
   '(shell-pop-universal-key "C-t")
   '(shell-pop-window-size 30)
   '(shell-pop-full-span t)
   '(shell-pop-window-position "bottom")))

C-t 开关 terminal,从 terminal 里可以方便的调出 python shell,ipython 等命令行工具。(eshell 对一些工具支持不是很好。

一些 IDE 的特性,比如调试,补全等。

  1. 调试,对于Web 端的同学来说,HTML,JavaScript 可能都是在浏览器里调试的;写个脚本肉眼调试吧;写个家庭作业 printf 调试吧。复杂问题的调试仍然用 IDE。

  2. 补全,Vim 有 YCM,语义+ 模糊匹配,***比Emacs 的 Company 套件好多了,但是考虑到 编辑器的重度用户 大部分是写脚本的系统管理员,运维,测试,web前端,和后端轻栈的人以及作家,科学家,***有没有语义补全意义不大(反正也用不到…IDE的对编程语言的感知能力普通插件很难模仿全面,模仿全面了基本等于重造一个IDE);模糊匹配还是比较有用的,可惜 Emacs 的 auto-complete,company 都不支持。

最后,想想看,用Vim写中文文档的同学,输入法切来切去真的很快吗?ESC 键 和 C-[ 按的次数 肯定是高于 M-x 的。

9 个赞

谢谢,很有帮助。


嗯,evil可以自动切換emacs原生输入法。 vim也有fcitx-remote一类的东西(emacs也有,而且macOS,MS-Win都有实现了) 很多vim或evil用户会把连按fd或hj设置成esc,而且这个在中文输入法也差不多能用。