vim编辑器介绍及其常用命令
vim简单的介绍
Vim 编辑器是一个模式编辑器 。 这意味着在不同状态下编辑器有不同的行为模式 。 两个基本的模式是 Normal 模式和 Insert 模式 ,还有可视模式。 在 Normal 模式下你键入的每一个字符都被视为一个命令 。 而在 Insert 模式下键入的字符都作为实际要输入的文本内容 。可视模式为我们提供了极为友好的选取文本范围,以高亮显示。
刚启动时 Vim 工作于 Normal 模式 。 要进入 Insert 模式你需要使用"i"命令(i 意为 Insert). 接下来就可以直接输入了 。
最后按下键退出 Insert模式回到 Normal 模式 。 要进入可视模式你按“v”就可以了,接下来就会进入可视模式。
模式间的转换
命令 | 说明 |
---|---|
i | 在光标之前插入 |
a | 在光标之后插入 |
I | 在光标所在行的行首插入 |
A | 在光标所在行的行末插入 |
o | 在光标所在的行的上面插入一行 |
O | 在光标所在的行的下面插入一行 |
s | 删除光标后的一个字符,然后进入插入模式 |
S | 删除光标所在的行,然后进入插入模式 |
v | 进入可视化模式 |
退出vim编辑器
欲退出vim编辑器,请先回到正常模式,在输入: 回到命令模式,此时请输入以下命令∶
- :q 正常不保存退出
- :q! 强制不保存退出
- :wq 正常保存退出
注:如果你在放弃所有修改后还想以该文件的初始内容作为开始继续编
辑,还可以用":e!"命令放弃所有修改并重新载入该文件的原始内容 。
工作模式显示设置
要知道你现在所处的工作模式是什么,打开显示模式的开关:
:set showmode
你会看到按下冒号键之后当前光标跑到窗口的最后一行去了 。 那是使用冒号命令的地方(顾名思义,冒号命令就是总是以冒号打头的命令). 最后按下回车键结束整个命令(所有的冒号命令都以这种方式表明命令的结束).
现在就会在窗口底部显示模式的名称
--INSERT--这表明你目前处于 Insert 模式 。
--VISUAL-- 这表明你目前处于可视模式。
注:Normal 模式并不会显示--NORMAL--, 作为默认的工作模式它不显示任何字串
移动光标
移动光标有两种方式
第一种:常用的用箭头移动
第二种:用vim提供的方式:
在 Normal 模式后,你就可以用下面的命令来移动光标:
h 左
j 下
k 上
l 右
即:
删除字符
格式 d+位移命令
命令 | 说明 |
---|---|
x | 删除一个字符 |
nx | 删除n个字符 |
dw | 命令可以删除一个 word |
dnw | 命令可以删除n个 word |
dd | 删除所在行 |
ndd | 删除从本行起第n行(n可以为负数) |
d$ | 命令就是删除自当前光标到行尾的内容 |
:j | 删除本行的换行符 |
:nj | 删除第n行的换行符,当为n负数时删除从本行起的前n行的换行符 |
注: 很多命令都可以接受一个数字作为重复执行同一命令的次数 。
比如在本行添加10个你好!,就可以这样写 10a你好!
接下来就是讲一些比较常用的操作命令
常用命令
移动
以 Word 为单位的光标移动
w 命令还是会将光标移动到下一个 word 的首字符上
b 命令则将光标向后移动到前一个word 的首字符上
e 命 令 会 将 光 标 移 动 到 下 一 个 word 的 最 后 一 个 字符
ge 将光标移动到前一个 word 的最后一个字符上
将光标移到行首或行尾
^ 命令将光标移动到当前行的第一个非空白字符上
注:命令"^"前加上一个计数并没有任何效果$ 命令将光标移动到当前行行尾
n$ 则会移动到下n行的行尾
0 命令将光标移动到当前行行首
将光标移动到指定的字符上
fx 在当前行上查找下一个字符 x. 提示:"f"意为"find".汉字的空格不被视为空白字符
nfx 会把光标定位查找第n个字符 x
如:命令"3fa"会把光标定位于"ababaa"的第三个"a"上Fx 命令向左方向搜索
tx 命令形同"fx"命令,只不过它不是把光标停留在被搜索字符上,而是在它之前的一个字符上
Tx 命令向左方向搜索
注:这 4 个命令都可以用";"来重复 。 以","也是重复同样的命令,但是方向与原命令的方向相反 2 。 无论如何,这 4 个命令都不会使光标跑到其它行上去 。 即使当前的句子还没有结束
将光标移动到匹配的括号上
**% ** 它跳转到与当前光标下的括号相匹配的那一个括号上去
将光标移动到指定的行上
- nG 就会把光标置于第 n 行上
- G 会把光标定位到最后一行
- gg 命令是跳转到第一行的快捷的方法
- "H"意为 Home, "M"为 Middle, "L"为 Last.分别跳到首行,中间,末行
滚屏
- CTRL-U 命令会使文本向下滚动半屏
- CTRL-D 命令将窗口向下移动半屏,所以相当于文本向上滚动了半屏
- CTRL-E 向上滚动一行
- CTRL-Y 向下滚动一行
- CTRL-F 向前滚动一整屏(实际上是整屏去两行)
- CTRL-B 向后滚动一整屏
- zz 把当前行置为屏幕正中央
- zt 命令会把当前行置于屏幕顶端
- zb 则把当前行置于屏幕底端
搜索
- /string 命令可用于搜索一个字符串,这里也可以使用正则表达式
- ?string 命令与"/"的工作相同,只是搜索方向相反
注: 字符.*[]^%/?~$ 有特殊意义,如果你要找的东西包括这些内容,要在这些字符前面放置一个反斜杠 。
要查找上次查找的字符串的下一个位置 。 使用"n"命令如果你知道你要找的确切位置是目标字符串的第几次出现,还可以在"n"之前放置一个命令计数 。 "3n"会去查找目标字符串的第 3 次出现 。"N"命令会重复前一次查找,但是与最初用"/"或"?"指定的搜索方向相
反 。
- 忽略大小写
通常情况下你要准确地键入你要查找的东西 。 如果你并不关心目标字
符中字母的大小写,可以通过设置'ignorecase'选项
:set ignorecase
:set noignorecase
- 查找整个 WORD
如果你用"/the"来查找 Vim 也会匹配到"there". 要查找作为独立单
词的"the"使用如下命令:
/the\>
- 高亮显示搜索结果
:set hlsearch
:set nohlsearch
使用标记
当你用"G"命令从一个地方跳转到另一个地方时,Vim 会记得你起跳的位置 。 这个位置在 Vim 中是一个标记“``” 命令可以在两点之间来回跳转
CTRL-O 命令是跳转到你更早些时间停置光标的位置(提示:O 意为 older)
CTRL-I 则是跳回到后来停置光标的更新的位置,与按下键一样
:jumps 命令会列出关于你曾经跳转过的位置的列表 。 你最后一个跳转的位置被特别以一个">"号标记
'mark (单引号,或者叫呼应单引号)会使你跳转到 mark 所在行的行首
Vim 允许你在文本中定义你自己的标记 。 命令"ma"将当前光标下的位
置名之为标记"a"。 从 a 到 z 一共可以使用 26 个自定义的标记 。 定义后的标记在屏幕上也看不出来 。 不过 Vim 在内部记录了它们所代表的位置 。
要跳转到一个你定义过的标记,使用命令`{mark}, {mark}就是你定
义的标记的名字 。
标记当前选中行标记为a,命令为 ma
跳转到a标记处 命令为: 'a:marks 查看关于标记的列表
文本的改变
删除
格式 d+位移命令
命令 | 说明 |
---|---|
x | 代表 dl(删除当前光标下的字符) |
X | 代表 dh(删除当前光标左边的字符) |
D | 代表 d$(删除到行尾的内容) |
nx | 删除n个字符 |
dw | 命令可以删除一个 word |
dnw | 命令可以删除n个 word |
dd | 删除所在行 |
ndd | 删除从本行起第n行(n可以为负数) |
d$ | 命令就是删除自当前光标到行尾的内容 |
db | 删除自当前光标至前一个 word 的开始 |
diw | 删除当前光标所在的 word(不包括空白字符) |
daw | 删除当前光标所在的 word(包括空白字符) |
dG | 删除当前行至文件尾的内容 |
dgg | 删除当前行至文件头的内容 |
:j | 删除本行的换行符 |
:nj | 删除第n行的换行符,当为n负数时删除从本行起的前n行的换行符 |
修改
命令 | 说明 |
---|---|
c | 修改操作符 |
cw | 改变到一直到 word 结尾的内容 |
ce | 改变到一直到 word 结尾的内容和cw一样 |
cc | 命令可以改变整行,不过仍保持原来的缩进 |
c$ | 改变当前光标到行尾的内容 |
s | 代表 cl(修改一个字符) |
S | 代表 cc(修改一整行) |
注:**c命令的行为与"d"命令类似,不过在命令执行后会进入 Insert 模式 **
重复改动
"."命令是 Vim 中一个简单而强大的命令 。 它会重复上一次做出的改动 。
假设你在编辑一个 HTML 文件,想删除其中所有的<B>标签 。 你把
光标置于<B>的<字符上然后命令"df>". 然后到</B>的<上用"."命令做同样的事 。
"."命令会重复你做出的所有修改,除了"u"命令CTRL-R和以冒号开头的命令 。
"."需要在 Normal 模式下执行,它重复的是命令,而不是被改动的内容
Visual 模式
命令 | 说明 |
---|---|
v | 进入可视模式,以字符为单位选择。 |
V | 进入可视模式,以行为单位选择。 |
CTRL-V | 进入列块可视模式。 |
gv | 启动可视模式,重新选择上一次的选择区和相同模式。 在可视模式下,该命令将交换当前和上一次选择区。 在可视模式下使用 "p" 或 "P" 后,本命令选择被粘贴的文本。 |
<LeftMouse> | 设置当前光标位置。 如果处在可视模式,则退出可视模式。此功能只有在 'mouse' 选项包含 'n' 或 'a' 才可用。 如果点击位置与屏幕最后一行的距离在 'so' 选项设置的范围之内,屏幕文本将会上滚。 如果点击位置与屏幕第一行的距离在 'so' 选项设置的范围之内,屏幕文本将会下滚。 |
<RightMouse> | 如果当前不是可视模式,则进入可视模式。 光标位置和鼠标点击位置之间的文本将被高亮显示。 如果当前已经处于可视模式,文本高亮选择区的起点或终点之一将被置为鼠标点击的位置。 起点或终点的选择取决于谁离点击位置更近。此功能只有在 'mouse' 选项包含 'n' 或 'a' 时才可用。 |
<LeftRelease> | 如果 的位置与 不同,那么它的作用等同于 。 此功能只有在 'mouse' 选项包含 'n' 或 'a' 时才可用。 |
<Esc> | 可视模式下: 停止可视模式。 |
CTRL-C | 可视模式下: 停止可视模式。 如果插入模式等待中 (模式信息显示为 "-- (插入) 可视 --"),插入模式同时被停止。 |
在可视界面的命令
命令 | 说明 |
---|---|
o | 跳到高亮文本的另一端 即当前光标位置变成高亮文本的起点,光标移动到高亮文本的另一端。高亮区域保持不变。 |
O | 跳到高亮文本的另一端。 同 "o" 命令相似,但是在列块模式下,光标移动到水平方向的另一个角。 如果这个角上的字符占据了多个屏幕位置 (例如一个 <Tab>),那么高亮的文本区域会被改变。 |
~ | 切换大小写 |
d | 删除 |
c | 修改 |
y | 复制 |
> | 右移 |
< | 左移 |
! | 通过外部命令过滤 |
= | 通过 'equalprg' 选项的命令过滤 |
gq | 按照 'textwidth' 指定的宽度排版行 |
移动文本
你以"d"或"x"这样的命令删除文本时,被删除的内容还是被保存了起
来 。 你还可以用 p 命令把它取回来
"P"命令与"p"一样取回被删除的内容,不过它把被取回的内容置于光标之前 。 对于以"dd"删除的整行内容,"P"会把它置于当前行的上一行 。
np就可以把被删除行的 n 份副本放到当前位置
复制文本
要把文本内容从一处复制到另一处,你可以先删除它,然后马上用"u"命令恢复删除 。 再用"p"把它放到你想要的地方去 。
命令 | 说明 |
---|---|
yw | 复制的内容中包括了 word 之后的空白字符 。如果你不想要它们,那就用"ye" |
ye | 复制的内容中不包括了 word 之后的空白字符 |
yy | 命令复制一整行 |
y$ | 复制当前光标至行尾的命令是. |
剪贴板
- "*yy 把一行内容复制到剪贴板
- "*p 把剪贴板的内容复制出来
文本对象
- daw 删除这个单词(Delete A Word)
- cis 修改一整个句子(Inner Sentence)
- das 删除一个句子,把它后面的空白也给删除
对象 | 说明 |
---|---|
aw | 一个单词 (包括空格) |
iw | 内含单词 |
aW | 一个字串 (包括空格) |
iW | 内含字串 |
as | 一个句子 (包括空格) |
is | 内含句子 |
ap | 一个段落 (包括空格 |
ip | 内含段落 |
ab | 一个 () 块 (包括小括号) |
ib | 内含 () 块 |
aB | 一个 {} 块 (包括大括号) |
iB | 内含 {} 块 |
at | 一个 块 (包含 tag) |
it | 内含 块 |
a< | 一个 <> 块 (包括 <>)< |
i< | 内含 <> 块< |
a[ | 一个 [] 块 (包括 [])[ |
i[ | 内含 [] 块[ |
a" | 一个双引号字符串 (包括引号) |
i" | 内含双引号字符串 |
a' | 一个单引号字符串 (包括引号) |
i' | 内含单引号字符串 |
a` | 一个反引号字符串 (包括反引号) |
i` | 内含反引号字符串 |
替换模式
"R"命令会让 Vim 进入 replace 模式 。 在此模式下,每个键入的字符都
会替换掉当前光标下的字符 。 直到你键入结束该模式
注:replace 模式下的例外是按下回车键并不会把当前字符替换为回车,而是插入一个回车
vim编辑器介绍及其常用命令的更多相关文章
- 【Linux 操作系统】vim编辑器配置及常用命令
最近工作不安分, 没有了刚入行时候的锐气, 不知道什么时候开始懈怠起来, 周末在电脑旁边看新闻, 搞笑图片, 追美剧, 一坐就是一天, 很是空虚. 我需要摆脱这种状态, 正好想学习一下安卓底层, An ...
- 安卓程序代写 网上程序代写[原]vim编辑器配置及常用命令
最近工作不安分, 没有了刚入行时候的锐气, 不知道什么时候开始懈怠起来, 周末在电脑旁边看新闻, 搞笑图片, 追美剧, 一坐就是一天, 很是空虚. 我需要摆脱这种状态, 正好想学习一下安卓底层, An ...
- vim编辑器配置及常用命令
最近工作不安分, 没有了刚入行时候的锐气, 不知道什么时候开始懈怠起来, 周末在电脑旁边看新闻, 搞笑图片, 追美剧, 一坐就是一天, 很是空虚. 我需要摆脱这种状态, 正好想学习一下安卓底层, An ...
- Linux的简单介绍和常用命令的介绍
Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...
- redis 介绍和常用命令
redis 介绍和常用命令 redis简介 Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统.由于 Redis 的键 ...
- webpack 介绍 & 安装 & 常用命令
webpack 介绍 & 安装 & 常用命令 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二:webpack 介绍&安装 webpa ...
- shell编辑器vi的常用命令
一:翻页 ctrl+u向上翻半页 ctrl+f向上翻一页 ctrl+d 向下翻半页 ctrl+b 向下翻一页 二:移动光标指令 0: 光标移至当前行首 $: 光标移至当前行尾 三:常用插入.删除指令 ...
- Git笔记:Git介绍和常用命令汇总
Git 是一个开源的分布式版本控制系统,与 CVS, Subversion 等不同,它采用了分布式版本库的方式,不需要服务器端软件支持. 工作流程 Git 的工作流程大致如下: 克隆 Git 资源作为 ...
- vim编辑器介绍
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...
随机推荐
- 第九章 MySQL中LIMIT和NOT IN案例
第九章 MySQL中LIMIT和NOT IN案例 一.案例的项目 1.创建数据库语句: #创建数据库 CREATE DATABASE `schoolDB`; USE `schoolDB`; #创建学生 ...
- 吐槽CSDN--想钱想疯了--阅读全文需要关闭广告屏蔽
吐槽CSDN 想钱想疯了–阅读全文需要关闭广告屏蔽 近来csdn开始主推博客皮肤升级,说白了就是有一套新的盈利模式,具体怎么操作呢: 1. 采用信息流方式,博客内容变成类似朋友圈.微博.知乎那样的信息 ...
- canvas图表详解系列(4):动态散点图
本章建议学习时间4小时 学习方式:详细阅读,并手动实现相关代码(如果没有canvas基础,需要先学习前面的canvas基础笔记) 学习目标:此教程将教会大家如何使用canvas绘制各种图表,详细分解步 ...
- 无限大地图:lightmap拆分
无缝地图涉及到地形.物件的分块加载,同样,lightmap也需要动态加载.而场景烘焙时,所有物件都是一起烘焙的,那怎么把某些物件指定烘焙到某一张lightmap贴图中?网上找了很久,也没有看到具体的实 ...
- JavaScript之“创意时钟”项目
“时钟展示项目”说明文档(文档尾部附有相应代码) 一.最终效果展示: 二.项目亮点 1.代码结构清晰明了 2.可以实时动态显示当前时间与当前日期 3.界面简洁.美观.大方 4.提高浏览器兼容性 三.知 ...
- 多线程之Map:Hashtable HashMap 以及ConcurrentHashMap
1.Map体系参考:http://java.chinaitlab.com/line/914247.htmlHashtable是JDK 5之前Map唯一线程安全的内置实现(Collections.syn ...
- 【Win 10 应用开发】在代码中加载文本资源
记得前一次,老周给大伙,不,小伙伴们介绍了如何填写 .resw 文件,并且在 XAML 中使用 x:Uid 标记来加载.也顺便给大伙儿分析了运行时是如何解析 .resw 文件的. 本来说好了,后续老周 ...
- 【ASP.NET MVC 学习笔记】- 02 Attribute
本文参考:http://www.cnblogs.com/willick/p/3208427.html 1.特性(Attribute)对程序中的元素进行标注,比如类.字段.方法.属性等. 2.在.NET ...
- [poj1644]放苹果
题目链接:http://poj.org/problem?id=1664 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5, ...
- 461. Hamming Distance(leetcode)
The Hamming distance between two integers is the number of positions at which the corresponding bits ...