前言

有一个有趣的说法,说世界上的程序员分三种,一种使用 Emacs,一种使用 vim,剩余的使用其它编辑器——完全无视 Ultraedit / Notepad++ 等编辑器的存在。今天,我怀着朝圣的心态,尝试了一下 vim 这个神器,发现它不像传说中那么深奥神秘和枯燥,也还算较为容易上手。先把学习过程记录在此,和各位同学共享共勉。


Vim的前世今生

Long long ago(上世纪70甚至80年代之前),UNIX 用户都是用廉价的终端机通过电话线连到 UNIX 服务器上的,因为传输速率慢,所以当时的编辑器都是行模式编辑——每次只能显示操作一行。ed 是 UNIX 上最古老最基本的行模式编辑器,ex 是ed 的扩展,而 vi 构建在 ex 之上,并且引入了大家所熟悉的全屏编辑模式。发展至今,vi 已成为 Linux 最常用的编辑器,很多 Linux 发行版都默认安装了 vi。

vi 是 visual interface 的缩写,vim 是 vi IMproved (增强版的 vi ),但最初,vim 是 vi IMitation(冒牌的 vi )。VIM 是一个超级超级强大的文本编辑器,和 Emacs 一起,被业界视为宇宙中最强大的两个编辑器。


关于Vim,你必须知道的概念

和 Notepad++ 不同,vi(vim) 是有模式的。有人总结了很多模式,比如低行模式、normal 模式、编辑模式、选择模式、鼠标模式等。我个人觉得,倒不如简单地分为命令模式和编辑模式,而在命令模式下可以把命令分为很多类型。编辑模式下,使用 vi(vim) 和使用 Notepad++ 几乎一样。当需要设置、保存、查找、替换、定位等操作时,可以切换至命令模式,直接输入命令。任何情况下,按 Esc 键退回到命令模式;在命令模式下,按 i 或 a 键即可进入编辑模式。

除了有模式这个特色之外,vim还有很多高级功能,比如寄存器、宏、书签、映射等。在这里,我们只说一下寄存器。vim 里面的寄存器可以用来保存拷贝的文本、记录的宏、设置的书签等等,一般的编辑器都只有一个剪切板(MS Office 加入了多个剪切板),而 vim 和 Emacs 编辑器中的多寄存器可以实现多个剪切板的功能。vim 中有九类寄存器:

  1. 无名寄存器("):最近一次删除/修改/替换操作的文本都会放入这个寄存器
  2. 10个数字寄存器(0-9):拷贝或者删除的文本存入这些寄存器,这些寄存器是循环使用的,在每次存入内容到寄存器1时,原有的内容会依次存入到后一个寄存器中
  3. 小删除寄存器(-):删除内容少于一行时放入这个寄存器
  4. 26个命名寄存器(a-z或A-Z):大小写无关。这些寄存器可以在拷贝或者删除等操作中指定使用
  5. 四个只读寄存器(:.%#):特殊用途
  6. 表达式寄存器(=):特殊用途
  7. 选择和拖放寄存器(*+~):用于与系统剪切板交互,以及接收拖放操作的内容
  8. 黑洞寄存器(_):放到这里面的内容都被丢弃,这样可以删除或拷贝时不影响其它寄存器
  9. 最后一次搜索模式寄存器(/):保存最后一次搜索的正则表达式

在windows环境下体验vim

去 vim.org 下载 windows 平台的 gvim 安装程序(最新版本大概是8.0),安装后运行 gvim,估计你会被这样一个界面丑哭(要是你不小心少按了一个字母 g,运行了 vim,你可能永远都不想再看到它了)。

但是,千万不要轻易放弃,尽管这是一个追求颜值的时代。试试在键盘输入:

:colo murphy

看起来是不是舒服一点了呢?除了murphy,还有很多种风格可选,输入colo按空格,再按Tab,可显示全部风格。继续操作,只需要几行命令,就会让gvim变成这个样子


如果再按装上常用的插件,比如,可以从代码中提取类结构的taglist插件,gvim瞬间就成了这个样子:


vi(vim)常用命令

  • 打开文件、保存、关闭文件
:w              //保存文件
:w file_name    //保存至file_name文件
:q              //退出编辑器,如果文件已修改请使用下面的命令
:q!             //退出编辑器,且不保存
:wq             //退出编辑器,且保存文件
:x              //退出,如果文件更改则保存
ZZ              //退出,如果文件更改则保存
:e file_name    //编辑文件名为file_name的文件
  • 插入文本或行
a              //在当前光标位置的右边添加文本
i              //在当前光标位置的左边添加文本
A              //在当前行的末尾位置添加文本
I              //在当前行的开始处添加文本(非空字符的行首)
O              //在当前行的上面新建一行
o              //在当前行的下面新建一行
R              //替换(覆盖)当前光标位置及后面的若干文本
J              //合并光标所在行及下一行为一行(依然在命令模式)
  • 移动光标
1. 使用上下左右方向键
2、命令模式下h -> 向左j -> 向下k -> 向上l -> 向右空格键 -> 向右退格键 -> 向左回车键 -> 移动到下一行首减号键 -> 移动到上一行首
  • 删除、恢复字符或行
x              //删除当前字符
nx             //删除从光标开始的n个字符
dd             //删除当前行
ndd            //向下删除当前行在内的n行
u              //撤销上一步操作
U              //撤销对当前行的所有操作
  • 搜索
/string        //向光标下搜索string字符串
?string        //向光标上搜索string字符串
n              //向下搜索前一个搜素动作
N              //向上搜索前一个搜索动作
  • 跳转至指定行
n+             //向下跳n行
n-             //向上跳n行
nG             //跳到行号为n的行
G              //跳至文件的底部
  • 复制、粘贴
yy             //将当前行复制到缓存区,也可以用 "ayy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务
nyy            //将当前行向下n行复制到缓冲区,也可以用 "anyy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务
yw             //复制从光标开始到词尾的字符
nyw            //复制从光标开始的n个单词
y^             //复制从光标到行首的内容
y$             //复制从光标到行尾的内容
p              //粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用"ap进行粘贴
  • 替换
:s/old/new         //用new替换行中首次出现的old
:s/old/new/g       //用new替换行中所有的old
:n,m s/old/new/g   //用new替换从n到m行里所有的old
:%s/old/new/g      //用new替换当前文件里所有的old

配置vim

来吧,就用gvim编辑gvim的配置文件C:\Program Files (x86)\Vim_vimrc(操作系统或许会保护这个文件的读写权限,建议使用系统管理权限运行C:\Program Files (x86)\Vim\vim80\gvim.exe),在后面追加:

"处理文本中显示乱码
set encoding=utf-8
set fileencodings=utf-8,chinese,latin-1
if has("win32")set fileencoding=chinese
elseset fileencoding=utf-8
endif"处理菜单及右键菜单乱码
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim"处理consle输出乱码
language messages zh_CN.utf-8"配色方案:koehler/murphy
colo murphy"字体设置
"set guifont=courier_new:h12"总是显示标签。0:不显示;1:多于1个时显示"
set showtabline=2"开启行号
set nu!"setnumber"开启自动缩进, 7.3以上版本已自动开启"
set autoindent"缩进宽度为4个字符"
set shiftwidth=4"tab宽度为4个字符"
set tabstop=4"编辑时将所有tab替换为空格"
set et"按一次Backspace就删除4个空格"
set smarttab"Gvim启动后窗口最大化
autocmd GUIEnter * simalt ~x

保存退出,再次打开gvim,你会发现世界变得如此美好!


安装taglist插件

第一步,从 https://sourceforge.net/projects/ctags/files/ctags/5.8/ctags58.zip/download 下载ctags,解压后将其中的ctags.exe 复制到gvim.exe 所在的目录,在我这里是C:\Program Files (x86)\Vim\vim80

第二步,从 http://www.vim.org/scripts/script.php?script_id=273 下载taglist.zip文件,解压,将doc\taglist.txt 文件复制到 C:\Program Files\Vim\vimfiles\doc下,
将plugin\taglist.vim 文件复制到 C:\Program Files\Vim\vimfiles\plugin下。

第三步,以管理员身份运行cmd,cd至C:\Program Files\Vim\vim80目录,运行gvim.exe,命令模式下输入":helptags C:\Program Files\Vim\vimfiles\doc",就会在C:\Program Files\Vim\vimfiles\doc下生成tags文件。

第四步,重启gvim.exe,打开一个源码文件,执行命令:Tlist,大功告成。

Vim编辑器学习笔记相关推荐

  1. Linux 中vim编辑器学习笔记

    vim是Linux是非常常用的编辑器,也是编程开发中的神器之一.接下来,是我学习vim编辑器的一些笔记,总结如下: 首先:我们接触的vim编辑器一共有三种模式,分别为命令模式.编辑模式.末行模式. 具 ...

  2. 富文本编辑器 —— 学习笔记

    富文本编辑器 -- 学习笔记 文章目录 富文本编辑器 -- 学习笔记 一.wangEditor 1.内容处理--获取/设置 JSON 一.wangEditor 1.内容处理--获取/设置 JSON 使 ...

  3. DMU软件 语法高亮 vim设置--学习笔记6

    用vim编程时, DMU的关键词没有语法高亮, 看着不舒服, 就进行一下设置, 并记录过程. 设置的效果如下 设置流程 本次设置的比较简单, 将关键词分为: 模型model, 比如DMU1, DMU2 ...

  4. 【Vim】学习笔记四 多文件编辑、可视模式、视窗操作

    文章目录 1. 多文件编辑 (1) 使用vim编辑多个文件 (2) 进入vim后打开新文件 (3) 恢复文件 2. 可视模式命令简介 3. 视窗操作 (1) 视窗操作简介 4. 创建加密文档 5. 在 ...

  5. vi(vim)编辑器 学习笔记

    vi是非图形化的编辑器 vim是vi的加强版. 三种使用模式 一般模式用户可以进行光标的移动,删除字符以及复制 编辑模式下,用户可以插入或者删除字符 命令模式下,可以保存文件或者退出编辑器 移动操作 ...

  6. vim编辑器学习记录

    i:在光标所在字符前开始插入 a:在光标所在字符后开始插入 o:在光标所在行的下面另起一新行插入 s:删除光标所在的字符并开始插入 I:在光标所在行的行首开始插入 如果行首有空格则在空格之后插入 A: ...

  7. 【Vim】学习笔记day02 Vim的三级窗体切换

    系列说明 本系列为学习随笔, 记录个人觉得容易遗忘的重点内容, 全面的指南请star项目 GitHub上的Learn-Vim 本文是ch 的内容笔记 新手写作, 若有错误的地方, 恳请读者指正, 先行 ...

  8. Linux vi(vim)编辑器学习-收集搬运

    vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.vi是"visual interfa ...

  9. mac vim python3_VIM学习笔记 编译源码(Compile Code)-Python

    Python作为一种解释型编程语言,需要解释器来编译并执行Python代码. 测试Python 对于Linux和Mac操作系统,均已预装Python.而在Windows下,可以使用安装包或者直接解压版 ...

  10. {魔兽编辑器学习笔记} 一 安装编辑器、创建地图

    首先,强烈强烈强烈向大家推荐这位大神的教程,入股不亏 冲吧! 链接:https://blog.csdn.net/DreamerQW?type=blog 一.下载&安装 u1s1 一直都是前辈帮 ...

最新文章

  1. 无线AP、WiFi、WLAN是什么关系?
  2. ajax.call失效无请求,移动端ajax请求问题?
  3. 力扣删除排序数组中的重复项 II
  4. DSB2017第一名论文理解: 3D Deep Leaky Noisy-or Network(一)
  5. Git--rebase合并提交
  6. 云服务器 ECS 搭建WordPress网站:购买 Linux 实例
  7. python django flask介绍,Django/Flask简介
  8. html5 加入收藏夹,设为首页、添加到收藏夹代码
  9. 获取打开的记事本中的内容 - 回复 ymg1103 的问题
  10. 情景式领导力学习(2) - 实践案例及思考
  11. [NOIP模拟33]反思+题解
  12. 微信小程序-更换头像
  13. python批量裁剪图像
  14. [Mac 硬件相关] 如何确定Mac笔记本版本及电池
  15. 最新前端体系学习路径推荐(内附免费资料)
  16. 谷歌与Oracle:Java版权大战现在牵扯到美国总统奥巴马
  17. spring-Cloud-netflix-快速入门(三)-服务间调用
  18. Ubuntu 10.04下fcitx输入法中去掉多余的输入方式
  19. 计算机网络是按覆盖地域划分吗,下列哪些计算机网络是按覆盖地域划分的()。...
  20. 专家说:孩子3岁就说谎,暗示其智商很高,严惩可能起到反作用

热门文章

  1. 深入浅出MFC.pdf
  2. 个人博客系统开发记录
  3. HDU操作系统课程设计实验一
  4. bbsmax mysql_MySQL中自己不太常用的命令
  5. PJzhang:kali linux安装网易云音乐、Visual Studio Code、skype
  6. 时间序列(一):时间序列数据与时间序列预测模型
  7. SCJP刷题学习笔记(Part six)
  8. 第58章、拍照功能实现(从零开始学Android)
  9. 10+必备的 WORDPRESS 常用插件
  10. 数字电子技术之逻辑门电路