最近一段时间, 看了两本关于 vim 的书, 从新学了一遍 vim, 在感慨 vim 强大的同时, 也为从前的自满感到汗颜, 我拿起了从前作的关于 vim 的笔记, 从新梳理了一遍, 做为一个系列分享到网上, 主要目的是想让更多 vim 的爱好者可以掌握更多的操做技巧.html
本系列 vim 笔记的目的不是从零教会你如何操做 vim, 而是做为一本手册或者扩展你的视野, 让你知道原来 vim 还能这么用.git
但愿你能从本系列教程中收获到你感兴趣的部份内容!vim
本系列教程共分为如下四个部分:浏览器
网上有不少形容 vim 的学习曲线是如何陡峭的说法. 人, 最恐惧未知的事情. 若是有人给你说: 你花一天的时间找一个入门教程进行学习就能够学会基础操做
, 你会学习 vim 吗? 绝大部分人都是会的, 其实事实也就是这样, 若是只是基础操做的话 1 天时间绝对是够了. 可是绝大多数人得不到这样的答案, 因此他们关上了这扇窗.bash
在我看来, vim 的学习投入与产出的性价比是很高的, 学习了 vim 后你会有以下的一系列好处:服务器
git
)Atom
, Sublime
, VSCode
, NOTEPAD++
等工具泛滥的现在, 你能够选择一个有着近 40 年历史的通过了时间考验的编辑器编辑器的切换是有成本的, 并且成本不小. 任何事情作到一半再去作另外的事情绝对比从一而终的人损失大得多, 所以选择一个适合本身的编辑器做为之后的伙伴是一件应该慎重的事情, 而使用过 vim 的人不多会再换用其余的编辑器, 这应该能说明不少问题.markdown
有些人持有工具无用论的观点, 认为写好代码才是一切, 事实确实是这样. 可是难道有人会拒绝更快速, 更高效的写完一段优雅的代码吗? 这二者并不是是鱼和熊掌不可兼得, 咱们均可以有.编辑器
这方面话题比较容易引战, 点到为止, 具体如何交由读者自行判断.工具
Let's go!oop
第一步固然是安装, 这里对 MacOS
与 Linux
进行安装示范
系统内置
Mac OS 默认内置 vim, 在没有安装任何其余版本 vim 的状况下在终端中输入 vim --version
可看到以下图:
+
表明含有的功能, -
表明不包含的功能. 能够看到系统内置 Vim
的 clipboard
选项为 -
, 表明没有剪贴板功能, 也就是说不会与系统剪贴板有任何互动, 即在 vim 中的内容没法复制到另外一个程序中, 不管如何设置都没法改变. 这是最大的区别.
并且因为是系统内置, 因此若是想要手动升级的话没有可能, 只能等到系统更新的时候 Apple 更新官方内置 vim
.
官方版 Vim, 经过 Homebrew 安装
在终端输入 brew install vim
能够经过包管理工具 Homebrew
来安装官方版本 Vim
. 安装完后的 vim 位置在 /usr/local/bin/vim
(经过系统命令 which vim
能够知道具体程序的路径), 而系统自带的 vim 位置在 /usr/bin/vim
, 若是要使用经过 Homebrew 安装的 Vim
, 则必须将系统识别的环境变量 PATH
顺序调整为
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
复制代码
调整 PATH
顺序方法: 打开路径 /private/etc/paths
(此为隐藏路径, 须要打开显示隐藏文件开关才能看到), 使用任意文本编辑器打开修改并保存. 以下图:
这样设置以后当在终端中输入 vim 时系统会先对 /usr/local/bin
路径进行检索, 若是此路径没有的话在对 /usr/bin
进行检索, 以此类推. 此时再次验证 which vim
命令, 若是返回了 /usr/local/bin
就说明设置成功. 之后只要是使用 vim [filename]
便可使用经过 Homebrew
安装的 vim
来打开了.
此时经过 vim --version
可看到以下图
最大的改变是 clipboard
选项变为了 +
, 并且不少功能也变为了 +
.
经过 Homebrew
安装的 vim
一切都很好, 我也用了很长一段时间, 可是有两个问题一直困扰着我:
Markdown
文件时, 若是开启了语法渲染以及底部状态栏插件的话会在快速移动光标过程当中有较大延迟. 这种感受在遇到语法段落结构复杂, 且光标移动较快时最为明显. 极大的影响了使用感觉.若是 vim
一直是这种问题的话也当不得 编辑器之神 的称呼了. 我上网搜索后发现有不少人都跟我同样注意到了这一点. Mac 终端上的 vim
速度慢, 卡顿, 在 Linux 下就很是流畅没有任何延迟. 经过多方查证, 我测试了 MacVim 在 Mac 系统下的流畅程度. 果真有惊喜.
MacVim, 经过 Homebrew 安装
MacVim
是 vim
在 Mac 系统的移植, 其内核与官方版本保持一致. 也就是说若是官方版本的 vim
在 Mac 上能实现什么功能, 那么 MacVim
也能实现相同的功能.
经过 Homebrew 安装的话只须要用到命令 brew install macvim
. 安装完成后在终端使用 mvim
便可打开 MacVim
桌面程序.
若是想经过终端打开 MacVim
的命令行版本, 使用 mvim -v [filename]
便可.
注: 因为经过 Homebrew
安装的绝大部分包都没有 GUI, 所以 Homebrew
不会将包移入 /Applications
, 这致使了若是想在桌面上双击一个文件来使用 MacVim
打开很难实现, 并且在 Mac 的 LaunchPad
里是找不到 MacVim
的(即便它是一个 GUI 软件)
所以, 有了下一个解决方法.
MacVim, 经过 Homebrew Cask 安装
Cask
是 Homebrew
的一个软件管理程序. Homebrew
自己就已是包管理工具了, 其下的 Cask
又能管理程序, 一层套一层, 真会玩. 不过 Homebrew
绝大部分包都是一些环境, 而不是平常用户操做的交互式软件. 而 Cask
绝大部分包都是 GUI 软件. 经过 Cask
咱们能安装绝大部分咱们平常须要的软件, 好比 QQ, 音乐, 浏览器, 各类工具...
经过 brew install cask
安装 Cask
包. 安装完成后再经过 brew install macvim --cask
来安装 MacVim
.
安装完成后你能够经过终端得知 MacVim
自动将 mvim
命令与路径 /usr/local/bin
里的 vim
, gvim
, view
等命令进行了绑定. 这表示在 系统变量 PATH
为 /usr/local/bin
第一的时候, 咱们只要是使用 vim
, gvim
, view
中的任意一个都会打开 MacVim
桌面端程序.
若是此时仍是想用 MacVim
以命令行模式打开文件的话可使用 mvim -v
或者 vim -v
或者其余几个绑定的命令. 固然我为了方便直接在 ~/.zshrc
(我是用的是 zsh) 中设置了 alias.
alias vim='mvim -v'
复制代码
设置完记得使用 source ~/.zshrc
或者重启终端来重载 ~/.zshrc
经过 MacVim
与 终端 vim
的安装体验对比, 总结了 MacVim
的以下优缺点(一样对应 vim
的优缺点):
优势
缺点
总结
若是必须在 Mac 上使用 vim, 并且对流畅度要求比较高, 那么就是用 MacVim 吧.
若是绝大多数工做环境都在终端上完成, 那么就使用终端 vim
.
若是要求兼具了以上二者, 就等待吧, 等官方解决 Mac 系统上的延迟问题
在 CentOS 中咱们可使用以下方法安装 vim
可是通过屡次试验以后发现这三种方法的前两种都是剪贴板缺失的 vim, 也就意味着不能与系统剪贴板进行交互, 所以最好安装 GUI 版 Vim
sudo yum install vim-X11
复制代码
调用 vim
时使用 vimx
代替 vim
安装 vim-gtk
or vim-gnome
.
安装 install gvim
模式是 vim 与其余编辑器的最重要区别之一, 简单来讲就是一样一个界面的一样操做在不一样模式下会产生不一样的效果. 最经常使用的模式有 Normal Mode
, Insert Mode
, Visual Mode
, 与 Command Line Mode
Vim 默认模式, 又称为命令模式, 可以使用 hjkl 进行移动和简单编辑
该模式下能够尽情地输入, 普通模式经过 i
, a
, o
, cc
等命令可进入插入模式.
与普通模式相似, 不一样的是当移动时会进行扩展当前的选择区域. 普通模式按 v
(进入字符选择模式) 或 V
(进入行选择模式)进入该模式
在该模式下能够在窗口的下方输入一行命令, 而后执行. 当一条命令执行完会自动退出命令模式进入普通模式.
命令模式经过输入 :
进行开启
新输入的文本会替换光标所在处的文本, 并使光标依次向后移动.
普通模式下经过按 R
进入该模式
与命令模式类似, 不一样的是在该模式下可执行屡次命令不会自动退出命令模式. 直至输入 :visual
退出该模式
在普通模式下经过按 Q
能够进入该模式
当咱们写了脚本或者不喜欢某些按键的触发方式, 咱们固然能够将其改成咱们认为最适合咱们的键位, vim 对按键映射作了极为精细的区分, 让咱们能够更好地掌控全局.
<k0>-<k9>
: 小键盘数字 0 到 9<S-x>
: 大写 S 配合 x, 意味着 shift+x 组合键<C-x>
: 大写 C 配合 x, 意味着 ctrl+x 组合键<A-x>
: 大写 A 配合 x, 意味着 alt+x 组合键<ESC>
: ESC 键<BS>
: backspace 退格键<CR>
: ENTER 回车键<Space>
: 空格键<Shift>
: shift 键<Ctrl>
: ctrl 键<Alt>
: alt 键<F1>-<F12>
: F1 到 F12 功能键由于 vim 有多种模式, 所以咱们能够针对不一样的模式设置不一样的快捷键映射
map
: 用于正常模式, 但是模式, 选择模式, 操做待决模式
nmap
: 用于正常模式
vmap
: 用于可视模式与选择模式
xmap
: 用于可视模式
smap
: 用于选择模式
omap
: 用于操做待决模式
map!
: 用于插入模式与命令行模式
imap
: 用于插入模式
cmap
: 用于命令行模式
nore
: 不递归, 不然在下面的按键映射下按下 i 就等于按下 k, 就等于按下 j, 最后结果乱套.
nnoremap i k
nnoremap k j
nnoremap j h
复制代码
<Leader>
: 意思就是在各类快捷键的最前面加上<leader>
, 避免了二义性. 以下所示, 在普通模式按下##w 时, 就完成了文件的保存工做(若是不进行自定义设置的话, 默认的 leader 键为反斜杠 \
)
let mapleader="##"
nmap `<leader>` w :w<CR>
复制代码
inoremap ' ''<esc>i " 单引号补全 // 在普通模式, 快速按下 fw, 就至关于输入了: w<CR>, fw 能够理解成 file\_write. "文件保存与退出 nmap fw :w `<CR>` nmap fq :q `<CR>` nmap fwq :wq `<CR>` 复制代码
本文做者 Hanley Lee, 首发于 闪耀旅途, 若是对本文比较承认, 欢迎 Follow