差别:
-
-
vim
编辑上一行直接 大写的O
, 搞定, 下面一行直接小写的o
, 搞定.emacs
确总是需要手动起一行
-
-
-
vim
的纵向选择, 很有用~ , 百度emacs
的这个功能, 发现并没有… 请问大神们这个能实现么
-
PS: 我本人无论是 vim
还是 emacs
--------------------------------- 都是个渣!
vim
编辑上一行直接 大写的 O
, 搞定, 下面一行直接小写的 o
, 搞定. emacs
确总是需要手动起一行vim
的纵向选择, 很有用~ , 百度 emacs
的这个功能, 发现并没有… 请问大神们这个能实现么PS: 我本人无论是 vim
还是 emacs
--------------------------------- 都是个渣!
用上evil就都有了,其实我是先学的emacs,然后用emacs学的Vim_(:3」∠)_
因为vim是模式编辑器,所以在不同的模式下相同的输入可以代表不同的命令,各个模式处于不同的命令空间; 而emacs是没有所谓的模式的,所以都在同一个命令空间中,想区别各个命令就必须加上复杂的前缀; 只能说两者的设计思想不一样,vim是为了打造一个好用的编辑器,而emacs是为了打造一个统一的平台。 另外,vim是emacs下最好的编辑器:heart_eyes:
把vim跑在emacs下,yeah
还能这么玩?
晓得了, 不过 emacs 学好后, 真的比 atom 啥的编辑器好使么, 目前看了紫龙兄的视频五天, 感觉还是不如编辑器, 但是我很喜欢 emacs 的移动方式, 个人及其厌恶上下左右键…
听起来我还有很长的路要走…
试试 spacemacs
我还是个菜, 打算先跟紫龙的教程走走~ 等足够了解了再去做别的尝试吧~ thx you
其实我觉得重要的是插入空行而不进入插入模式。 以及给多行添加注释。
多行注释? 有什么区别么
多问不如自己多试。另外建议使用别人做好的配置文件,等你熟悉了再重新造轮子
要做配置,先对着spacemacs改造自己的vim配置,然后对着vim创建自己更加习惯的emacs配置。
你们真是机智, 不过我 emacs 和 vim 都比较渣, 准备慢慢来, 马上要看到 evil 了
我倒是写过一个函数来这么做:
;; 在普通模式下在下一行增加一个空行,但光标不移动也不进入插入模式
(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的功能。
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 的特性,比如调试,补全等。
调试,对于Web 端的同学来说,HTML,JavaScript 可能都是在浏览器里调试的;写个脚本肉眼调试吧;写个家庭作业 printf 调试吧。复杂问题的调试仍然用 IDE。
补全,Vim 有 YCM,语义+ 模糊匹配,***比Emacs 的 Company 套件好多了,但是考虑到 编辑器的重度用户 大部分是写脚本的系统管理员,运维,测试,web前端,和后端轻栈的人以及作家,科学家,***有没有语义补全意义不大(反正也用不到…IDE的对编程语言的感知能力普通插件很难模仿全面,模仿全面了基本等于重造一个IDE);模糊匹配还是比较有用的,可惜 Emacs 的 auto-complete,company 都不支持。
最后,想想看,用Vim写中文文档的同学,输入法切来切去真的很快吗?ESC 键 和 C-[ 按的次数 肯定是高于 M-x 的。
谢谢,很有帮助。
嗯,evil可以自动切換emacs原生输入法。 vim也有fcitx-remote一类的东西(emacs也有,而且macOS,MS-Win都有实现了) 很多vim或evil用户会把连按fd或hj设置成esc,而且这个在中文输入法也差不多能用。