admin管理员组文章数量:1658397
前言
有一个有趣的说法,说世界上的程序员分三种,一种使用 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 中有九类寄存器:
- 无名寄存器("):最近一次删除/修改/替换操作的文本都会放入这个寄存器
- 10个数字寄存器(0-9):拷贝或者删除的文本存入这些寄存器,这些寄存器是循环使用的,在每次存入内容到寄存器1时,原有的内容会依次存入到后一个寄存器中
- 小删除寄存器(-):删除内容少于一行时放入这个寄存器
- 26个命名寄存器(a-z或A-Z):大小写无关。这些寄存器可以在拷贝或者删除等操作中指定使用
- 四个只读寄存器(:.%#):特殊用途
- 表达式寄存器(=):特殊用途
- 选择和拖放寄存器(*+~):用于与系统剪切板交互,以及接收拖放操作的内容
- 黑洞寄存器(_):放到这里面的内容都被丢弃,这样可以删除或拷贝时不影响其它寄存器
- 最后一次搜索模式寄存器(/):保存最后一次搜索的正则表达式
在windows环境下体验vim
去 vim 下载 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
else
set 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/projects/ctags/files/ctags/5.8/ctags58.zip/download 下载ctags,解压后将其中的ctags.exe 复制到gvim.exe 所在的目录,在我这里是C:\Program Files (x86)\Vim\vim80
第二步,从 http://www.vim/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编辑器学习笔记 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729803659a1213103.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论