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中打开/保存/退出/修改文件

() :e filename " < - > 打开文件filename,注意filename包含文件路径. :e ~/hahaya.cc 打开主目录下的hahaya.cc文件
() saveas filename " < - > 文件另存为,注意filename包含文件路径
() :w " < - > 文件保存
() :q " < - > 不保存退出,回到终端下
() :q! " < - > 不保存强制退出
() :wq " < - > 保存退出
() :wq! " < - > 强制保存退出
() :bn " < - > 打开多个文件时,使用该命令切换到下一个文件
() :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=[,,] " 标签页在窗口上方显示标签栏。=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打开。

退出时,使用命令:

 <ESC>   :q!     <ENTER>  "  不保存退出
<ESC> :wq <ENTER> " 保存后退出 " 等价于: ZZ ":保存退出
ZQ ":不保存退出

4.1 move 书签、及跳转

(1) 光标移动

   k "(up)
h "(left)     l "(right)     j "(down) e   "(词尾,end of word)
w  "(下一单词,beginnig of word)
b  "(前一单词,back word)
  "(“硬”行首,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 /ignore\c  " (\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     "(询问)
:,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 " 折叠代码 
												

3. Vim入门教程的更多相关文章

  1. Vim 入门教程

    Vim 入门教程 转载请保留以上信息 Vim 的教程相对比较零散,系统的教程比较少,我也阅读过不少教程,走过很 多弯路.借着 Vim-china 组织组建这一契机,整理下自己学习过的内容, 分享给大家 ...

  2. Vim入门教程

    尽管网上有成打的Vim在线教程,但是要么艰深晦涩,要么太过肤浅.本教程的目标让每个阶段都有斩获,从理解它的哲学(将和你终身相伴)到超越现在编辑技巧,成为其中的牛人. 简单来说,本教程的学习方式将使你终 ...

  3. Vim入门教程——转

    简书: https://www.jianshu.com/p/bcbe916f97e1

  4. Vim完全教程

    一.简介 世界上只有三种编辑器,EMACS.VIM和其它.   我们所处的时代是非常幸运的,有越来越多的编辑器,相对于古老的VIM和EMACS,它们被称为现代编辑器.我们来看看这两个古董有多大年纪了: ...

  5. Vim基础教程

    一.简介 世界上只有三种编辑器,EMACS.VIM和其它. 我们所处的时代是非常幸运的,有越来越多的编辑器,相对于古老的VIM和EMACS,它们被称为现代编辑器.我们来看看这两个古董有多大年纪了: * ...

  6. vim入门过程

    先下载了一本VIM的用户手册. 看到可以使用vimtutor(VIM的入门教程,很不错,由浅入深)作为入门. Unix系统中,请在命令行输入:vimtutor,进入教程. MS-Windows系统中, ...

  7. 做中学之Vim实践教程

    做中学之Vim实践教程 Vim VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码,即使以后你不编写程序,只要跟文本打交道,都应该学学VIM,可以浏览参考一下普通人的编辑利器--Vim这 ...

  8. linux 入门教程

    linux入门教程 搜索 Linux入门教程 前言 第一章 关于Linux的历史 第二章 图形界面还是命令窗口 第三章 Linux操作系统的安装 第四章 初步进入linux世界 第五章 Linux系统 ...

  9. mongodb入门教程

    title: mongodb入门教程 date: 2016-04-06 14:47:18 tags: --- 为什么要认识呢,因为这玩意就一傻逼 借用一下百科的介绍 MongoDB 是一个介于关系数据 ...

随机推荐

  1. 奇技淫巧之Delphi和JavaScript互通

    http://www.raysoftware.cn/?p=305 Delphi2010以后增加了新的RTTI信息,也就是通过RTTI可以在运行时获取/调用对象的公开成员或者函数. ScriptCont ...

  2. JAVA导出excel如何设置表头跨行或者跨列,跪求各位大神了

    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 0));// 开始行,结束行,开始列,结束列.只能是POI了吧?java还有其他方法吗?

  3. 配置Maven私服

    Nexus 是“开箱即用”的系统,不需要数据库,它使用文件系统加 Lucene 来组织数据,支持 WebDAV 与 LDAP 安全身份认证.Nexus 还提供了强大的仓库管理功能,构件搜索功能,它基于 ...

  4. CSS:CSS 导航栏

    ylbtech-CSS:CSS 导航栏 1.返回顶部 1. CSS 导航栏 导航栏 熟练使用导航栏,对于任何网站都非常重要. 使用CSS你可以转换成好看的导航栏而不是枯燥的HTML菜单. 导航栏=链接 ...

  5. Jmeter断言-所有断言讲解

    Jmeter断言-所有断言讲解 jmeter中有个元件叫做断言(Assertion),它的作用和loadrunner中的检查点类似: 用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中 ...

  6. SonarQube搭建和使用教程

    我想使用 SonarQube 查阅代码 请问怎么做,现在只有一个要审查代码的项目

  7. C++——指针与数组

    1.数组名不是指针,神似指针(可以将数组名直接赋值给指针) (1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组:(2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针 ...

  8. Navicat创建事件,定时更新数据库

    一.新建事件 二.在定义里编写要更改的SQL语句 如果SQL语句有多条,需要将SQL语句放在begin...end中 begin update student set num = '0'; updat ...

  9. Spring Boot主要目标

    Spring Boot主要目标 Spring Boot的主要目标是: 为所有Spring开发提供一个基本的,更快,更广泛的入门体验. 开箱即用,但随着需求开始偏离默认值,快速启动. 提供大型项目(例如 ...

  10. 第三记 Java面向对象

    相信很多人都有听到,见到这么一句话:Java是一门面向对象编程的语言,但是又是否对这句话有了自己的理解呢? 一.面向对象 面向对象是一种新兴的程序设计方法,也可以说是一种新的程序设计规范(paradi ...