1. 基本概念
1.1 了解Vim的三个基本模式
当我们安装完一个编辑器后,肯定会打开它,然后在里面输入点什么东西,但是打你打开Vim后,想要输入点什么却发现自己什么都没有输入,所以在写点东西之前,先来了解下Vim的三个基本模式
(1) Normal模式
当你启动Vim后,Vim会处于Normal模式。在Vim的Normal模式下,所有的键就是功能键,下面附上Vim快捷键分布图。
(2) Insert模式
在Normal模式下,按下键盘上的i键入Insert模式(当然还有其他方式,比如按下a、o、O等,i是最常用的方法),当你在Vim左下角看到 -Insert- 字体,表明你已经进入Vim的Insert模式。在Insert模式下,你可以自由的输入你想要输入的东西了,就像使用其他编辑器一样~
(3) Visual模式
在Normal模式下按下,按下键盘上的v键进入Visual模式。在Visual模式下,可以让你选择文件的一部分内容,以便进行删除、复制等操作。
1.2 三个基本模式之间的切换
(1) Normal <-> Insert
在Normal模式下,按下键盘上的 i 进入Insert模式
在Insert模式下,按下键盘上的 Esc 键回到Normal模式,如果你不确定是否进入了Normal模式,可以多次按下Esc键
(2) Noraml <-> Visual
在Normal模式下,按下键盘上的 v 进入Visual模式
在Visual模式下,按下键盘上的 Esc 键回到Normal模式(也可以再次按下v键)
好了,到此为此,已经完成学习Vim的准备工程,准备正式开始学习Vim......
1.3 常用功能一览:
2. 文件相关操作
2.1 创建/修改文件
当需要对一个文件进行编辑时,首先这个文件得存在。你可以使用Vim创建或修改文件(假设文件名为hahaya.cc),在终端下执行 Vim hahaya.cc,这条命令会打开hahaya.cc文件,当hahaya.cc这个文件不存在时,Vim会创建这个文件并打开。
Vim hahaya.cc,
vim打开多文件时:
vim a b c
:n 跳至下一个文件,也可以直接指定要跳的文件,如:n c,可以直接跳到c文件
:e# 回到刚才编辑的文件
2.2 在Vim中打开/保存/退出/修改文件
(1) :e filename " < - > 打开文件filename,注意filename包含文件路径. :e ~/hahaya.cc 打开主目录下的hahaya.cc文件 (2) saveas filename " < - > 文件另存为,注意filename包含文件路径 (3) :w " < - > 文件保存 (4) :q " < - > 不保存退出,回到终端下 (5) :q! " < - > 不保存强制退出 (6) :wq " < - > 保存退出 (7) :wq! " < - > 强制保存退出 (8) :bn " < - > 打开多个文件时,使用该命令切换到下一个文件 (9) :bp " < - > 打开多个文件时,使用该命令切换到上一个文件
2.3 文件浏览
:Ex "开启目录浏览器,可以浏览当前目录下的所有文件,并可以选择 :Sex "水平分割当前窗口,并在一个窗口中开启目录浏览器 :ls "显示当前buffer情况
2.4 vi与shell切换
:shell "可以在不关闭vi的情况下切换到shell命令行 :exit "从shell回到vi
3. 显示方式
3.1 多标签打开
(1)进入vim前
vim -p <文件名>
以多标签形式打开文件。如vim -p * 就是编辑当前目录的所有文件
(2)vim编辑中
:tabe <文件名> " 在新标签页中打开指定的文件。 :tabnew <文件名> " 在新标签页中编辑新的文件。 :tab split " 在新标签页中,打开当前缓冲区中的文件。 :tabf " 允许你在当前目录搜索文件,并在新标签页中打开。比如:tabf img.*。此命令只能打开一个文件. :tabnew " 增加一个标签 :tabc " 关闭当前的tab :tabo " 关闭所有其他的tab :tabs " 查看所有打开的tab :tabp 或gT " 前一个 :tabn 或gt " 后一个 :tablast " 移动到最后一个标签页。 :tabm [次序] " 移动当前文件的标签页次序。比如:tabm 1将把当前标签页移动到第2的位置。如:tabm不指定参数将被移动到最后。 :set showtabline=[1,2,3] " 标签页在窗口上方显示标签栏。=0完全不显示标签栏,=1只有用户新建时才显示,=2总是显示标签栏。
Vim默认最多只能打开10个标签页。你可以用set tabpagemax=15改变这个限制。
帮助
:help tab-page-intro命令,可以获得关于标签页使用的更多信息。
3.2 多窗口使用技巧
(1) 打开多个窗口
打开多个窗口的命令以下几个:
" 横向切割窗口 :new+窗口名 "(保存后就是文件名) :split+窗口名 "也可以简写为: :sp+窗口名 " 纵向切割窗口名 :vsplit+窗口名 ",也可以简写为: :vsp+窗口名
(2) 关闭多窗口
:q! :close :tabc " 关闭当前窗口 :tabo " 关闭所有窗口
可以用:q!,也可以使用:close,最后一个窗口不能使用close关闭。使用close只是暂时关闭窗口,其内容还在缓存中,只有使用q!、w!或x才能真能退出。
(3) 窗口切换
:ctrl+w+j/k "通过j/k可以上下切换, " 或者:ctrl+w加上下左右键, " 还可以通过或者两次ctrl+w依次切换窗口。 :tabs " 查看所有打开的tab :tabp 或gT " 前一个 :tabn 或gt " 后一个 :tablast " 移动到最后一个标签页。
(4) 窗口大小调整
" 纵向调整 :ctrl+w + " 纵向扩大(行数增加) :ctrl+w - " 纵向缩小 (行数减少) :res(ize) num " 例如::res 5,显示行数调整为5行 :res(ize)+num " 把当前窗口高度增加num行 :res(ize)-num " 把当前窗口高度减少num行 " 横向调整 :vertical res(ize) num " 指定当前窗口为num列 :vertical res(ize)+num " 把当前窗口增加num列 :vertical res(ize)-num " 把当前窗口减少num列
(5) 给窗口重命名
:f file
4. 基本操作
4.0 进入及退出 vim tutor:
进入时,使用命令:
:vimtutor
即可进入vimtutor,如果是gvim打不开,可以在运行(WIN+R)里输入vimtutor打开。
退出时,使用命令:
1 <ESC> :q! <ENTER> " 不保存退出 2 <ESC> :wq <ENTER> " 保存后退出 3 4 5 6 " 等价于: 7 8 ZZ ":保存退出 9 ZQ ":不保存退出
4.1 move 书签、及跳转
(1) 光标移动
k "(up) h "(left) l "(right) j "(down) e "(词尾,end of word) w "(下一单词,beginnig of word) b "(前一单词,back word) 0 "(“硬”行首,start of line) ^ "(“软”行首),移动到本行第一个不是blank字符的位置(所谓blank字符就是空格、Tab、换行、回车等) $ "(行末,end of line) G "(文尾,end of file) gg "(文首,start of file) NG "(go to line N), 移动到本文件的第N行 CTRL-o " (上次光标位置) CTRL-i " (下次光标位置) { "(段首) } "(段尾) [[ "(文件首行) ]] "(文件尾行)
% "(括号匹配) CTRL-G "(获取位置信息)
(2) 屏幕移动
CTRL-F " (前翻页) CTRL-B "(后翻页) CTRL-D " 向下半页 CTRL-U " 向上半页
" 我觉得更实用 这样看文章时就不会跳转出错另外还有
CTRL-E "向下一行 CTRL-Y "向上一行 zt "(移动光标所在行至屏幕顶端) zb "(底端) zz "(中间) H "(屏幕顶行) L "(屏幕底行) M "(屏幕中间行)
(3) mark和跳转
mx ":添加本文件"书签"x mX ":添加全局"书签"X `x ":跳转到书签x所在的行和列 'x ":跳转到书签x所在行 `` ":跳转到本文件上次离开的位置 gi ":跳转到上一次插入的位置 gv ":跳转到上一次进入visual的位置
4.2 Insert
i " (插入模式,before the cursor) I " (行头插入) a "(附加,after the cursor) A "(行末附加,end of line) o "(分段,后) O "(分段,前) s "(删除字符并插入) S "(删除至行末,并插入) cw " (删除一个字,并插入) C "(删除至行末,并插入)
4.3 Undo
u "(undo) CTRL-R "(undo the undo's) U "(fix a whole line)
4.3 Edit
x "(delete char) d "(delete) dd "(删除一行) D "(删除至行末) d2w "(delete 2 words) 2dd "(delete 2 lines) yy "拷贝当前行 Nyy "拷贝从当前行开始的总共N行 p "小写p,粘贴拷贝的内容
4.5 Search
/errroor "(查找erroor, 向下) n " (下一处) N " (上一处) ?errroor "(反向查找) n N /ignorec " (c 表示忽略大小写) :nohlsearch " (取消高亮显示) " Typing ":set xxx" sets the option "xxx". Some options are: ic 或者 ignorecase " ignore upper/lower case when searching is 或者 incsearch " show partial matches for a search phrase hls 或者 hlsearch " highlight all matching phrases
4.6 Replace
R "(改写模式) r "(改写一个字符) J "(合并两行) :s/thee/the "(把thee 替换成 the,该行第一个) :s/thee/the/g "(该行全部) :s/thee/the/c "(询问) :2,3s/old/new/g "(替换第2到3行的所有old为new) :%s/old/new/gc "(替换全文中出现的old,并有提示) :.,.+8s/dog/cat/g "(命令只在后续9行内进行替换:) :.,$s/dog/cat/g "( 只在当前行至文件结尾间进行替换) :/FROM/,/;/s/=/<>/g " 特定字符做为替换范围, 将从FROM至分号部分中的所有等号(=)替换为不等号(<>):
5. 寄存器
6. 宏
7. 小技巧
7.0 未归类
== " 格式化代码,该行 num<C-a> " 第一个遇到的数字加num num<C-x> " 第一个遇到的数字减num <c-]> " 跳转到定义 <c-o> " 返回原来光标位置 za " 折叠代码