Linux命令之vim(二)
这一章主要介绍vim编辑器的内部使用方法和注意事项
vim编辑器有四种工作模式:正常模式、插入模式、命令模式、可视模式。简单的判断方法就是看底部,什么都没有就是正常模式,光标在编辑器最底下时则是命令模式,有insert(replace)就是插入模式,有visual(visual line、visual block)就是可视模式。如果不确定自己处在什么模式下,按Esc(有时需要按两下)回到正常模式。
vimtutor可以进入vim编辑器的简单教程,所以请看一下吧。
(1).进入vim编辑器
这个可以去看前一章,需要注意的是~代表该行没有任何内容,如果没有任何内容则代表这行有空白字符(如空格,Tab,Enter等)或不可见字符。
(2).退出vim编辑器
一般在命令模式下退出vim编辑器
:q |
如果文件未被修改,直接退回到Shell;否则提示保存文件 |
:q! |
强制退出,不保存修改内容 |
:wq |
w命令保存文件,q命令退出vi,合起来就是保存并退出 |
:w filename |
另存为新的文件 |
ZZ |
保存并退出,相当于wq,但更方便 |
(3).移动光标
正常模式下最简单的移动光标hjkl,最左边的h往左移,最右边的l往右移,j看起来像向下的箭头向下移,k就是向上移了。
注意:vim区分大小写,输入命令时不要锁定大写。可以在命令前加个数字作为前缀,例如2j就是光标向下移动两行。
以下还有一些移动光标的命令,不过请从正常模式下开始操作:
0或|(不是大写的i也不是小写的L)或<HOME>键 |
将光标定位到一行的开头 |
$或<END>键 |
将光标定位到一行的末尾 |
w |
定位到下一个单词词首 |
e |
定位到下一个单词词尾。如果当前光标不在当前单词词尾,那会先定位到当前单词词尾 |
b |
定位到上一个单词词首。如果当前光标不在当前单词词首,那会先定位到当前单词词首 |
( |
定位到一句话的开头,以 !.?三种符号来界定。 |
) |
定位到一句话的结尾。 |
{ |
移动到段落开头,段落是以空行作为界定标准 |
} |
移动到段落结尾 |
[[ |
移动到第一行开头,在不是空行的情况下移动到第一个非空白字符 |
]] |
移动到最后一行开头 |
n| |
移动到第n个字符 |
gg |
移动到第一行开头 |
1G |
移动到第一行开头 |
G |
移动到最后一行开头 |
nG |
移动到第n行开头 |
H |
移动到屏幕顶端开头 |
nH |
移动到距屏幕顶端n行的开头 |
M |
移动到屏幕中间开头 |
L |
移动到屏幕底部开头 |
nL |
移动到距屏幕底部n行的开头 |
:n |
移动到第n行开头 |
(4).控制命令
正常模式下使用
<Ctrl>+u |
向前滚动半屏 |
<Ctrl>+b |
向前滚动全屏(下一页) |
<Ctrl>+d |
向后滚动半屏 |
<Ctrl>+f |
向后滚动全屏(上一页) |
<Ctrl>+y |
向前滚动一行 |
<Ctrl>+e |
向后滚动一行 |
<Ctrl>+i |
刷新屏幕 |
(5).进入插入模式
只有切换到插入模式下才能编辑文件。以下展示了一些从正常模式切换到插入模式的命令
Insert(按键) |
这个按键有两种模式:在光标位置前插入文本和替换光标当前位置文本 |
i |
在光标位置前插入文本 |
I |
在当前行开头插入文本(光标会移动到开头) |
a |
在光标位置后插入文本(光标会后移一位) |
A |
在当前行末尾插入文本(光标会移动到末尾) |
o |
在当前位置下创建一行(光标会移动到空行) |
O |
在当前位置上创建一行(光标会移动到空行) |
(6).删除字符或行
x |
删除当前光标下的字符 |
X |
删除当前光标前的字符 |
de |
删除当前光标到单词结尾的字符 |
dw |
删除当前光标到下一个单词前一位字符 |
d^ |
删除当前光标到行首的字符 |
d$ |
删除当前光标到行尾的字符 |
D |
删除当前光标到行尾的字符 |
dd |
删除当前光标所在的行 |
cc |
删除当前行的所有字符,并进入插入模式 |
cw |
删除当前光标到单词结尾的字符,并进入插入模式 |
C$ |
删除当前光标到行尾的字符,并进入插入模式 |
除了cc以外,都可以在前面添加数字进行重复操作,部分删除到结尾可能会合并行
(7).修改文本
r |
替换当前光标下的字符 |
R |
从当前光标开始替换字符,进入插入模式下的替换模式 |
s |
删除当前光标下的字符,并进入插入模式 |
S |
删除当前行的字符,并进入插入模式 |
(8).复制粘贴
yy |
复制当前行 |
nyy |
从当前行开始复制n行 |
yw |
复制一个单词 |
nyw |
从当前单词复制N个单词 |
p |
如果复制的是单词,则粘贴到当前光标的后面;如果是行,则粘贴到当前行的下一行 |
P |
如果复制的是单词,则粘贴到当前光标的前面;如果是行,则粘贴到当前行的上一行。 |
注意:除了以上的复制,第(6)项提到的所有删除,都可以使用pP进行粘贴(我怀疑都是剪切)。
(9).文本查找
在正常模式下,输入/ 是向下查找,?是向上查找,后面跟随想要查找的内容。查找结果会高亮显示,使用N、n来进行上一个、下一个查找,想取消高亮(取消本次查询)请在正常模式下使用:noh。
下面还有一些特殊字符,它们都有着自己的用处,如果希望使用这些特殊字符本身,需要在前面使用反斜杠\。
^ |
匹配一行开头,^在字符串前面 |
. |
代替任何一个字符 |
* |
(有点奇怪好像是匹配-1个,0个,2个和2个以上的字符。由于-1这个问题,所以*不能放在字符串首位) |
$ |
匹配一行的结尾,$在字符串末尾 |
[] |
匹配一组字符,每一个字符单独匹配 |
查找还可以在正常模式下使用FfTt,后面跟随单个字符,但只能在一个段落(因为是自适应转行,所以说是一行也是对的)内查询。F向上搜索,f向下搜索,光标定位到匹配的字符。T向上搜索,光标定位匹配字符前面,t向下搜索,光标定位匹配字符后面。
在文本查找中有一个特殊的括号配对查找。将光标移动到(、[、{、}、]、)处,然后按%,光标会跳到配对的括号处。
(10).set命令,自定义vim使用环境
set命令比较多,所以介绍几个可能会用到的。注意:set命令都是临时设置。永久设置环境请前往/etc/vimrc(影响所有用户)或~/.vimrc(只影响自己,没有就自己创建)编辑。
:set ic |
搜索时忽略大小写 |
:set ai |
设置自动缩进(自动对齐) |
:set nu |
显示行号 |
:set sw |
设置缩进宫格数,例如空格数为4,:set sw=4 |
:set ws |
设置循环搜索 |
:set wm |
设置自动换行 |
:set ro |
将文件类型改为只读 |
:set term |
输出终端类型 |
:set bf |
忽略输入的控制字符,如BEL(响铃)、BS(退格)、CR(回车)等 |
:set hlsearch |
打开高亮显示查找文本 |
大部分可以通过加no取消设置,例如:set nonu,set nohlsearch。还有:nohlsearch(缩写noh)可以取消单次查找高亮。
如果只想只是想搜索一次忽略大小写,可以/search\c,search代表检索的字符串
(11).运行外部命令
切换到命令模式,输入!和空格,再加上Linux命令即可
例如:
:! ls –a
即可显示当前目录下的文件。
按任意键可以返回vim编辑器
(12).文本替换
:s/search/replace
替换光标所在行内的第一个匹配的字符串。search为检索的字符串,replace为替换的字符串。
:s/search/replace/g
替换光标所在行内的所有匹配的字符串。/g表示替换所有找到字符串。
:#s/search/replace
替换第#行第一个匹配的字符串。#表示替换的行号。#后面可以有空格,也可以没有。
:#,#s/search/replace/g
替换#,#两行之间匹配的所有字符串,其中#,#代表替换操作的若干行中首尾两行的行号。#,#后面可以有空格,也可以没有。
:%s/search/replace/gc
替换整个文件中所有匹配的字符串,在替换前需要用户确认是否替换。%表示所有行,/c表示对每个匹配字符串提示是否进行替换。%后面可以有空格,也可以没有。
:%s/search/replace/gi
替换整个文件中所有匹配的字符串,字符串忽略大小写。/i表示忽略大小写。
注意:其中/可以换成@等特殊符号,不过很少有人用,了解就好。
(13).高级命令
J |
将当前行与下一行连接为一行 |
<< |
将当前行左移一个单位(一个缩进宽度) |
>> |
将当前行右移一个单位(一个缩进宽度) |
~ |
改写当前字符的大小写 |
<Ctrl>+g |
显示当前文件名和状态,以及光标所在位置(后面n,m;n代表行号,m代表列号) |
U |
撤消对当前行所做的修改 |
u |
撤消上次操作,vi只可以撤消一次,vim可以一直撤消 |
<Ctrl>+r |
可以重做被撤销的命令,也可以成为撤消掉撤消命令 |
:f |
以百分号(%)的形式显示当前光标在文件中的位置、文件名和文件的总行数 |
:f filename |
将文件重命名为filename |
:w filename |
保存修改到filename |
:e filename |
代开另一个文件名为filename的文件 |
:cd dirname |
改变当前工作目录到dirname |
:e # |
在两个打开的文件之间进行切换 |
:n |
如果用vim打开了多个文件(vim file1 file2…)时使用,切换到下一个文件 |
:N |
如果用vim打开了多个文件(vim file1 file2…)时使用,切换到上一个文件 |
:r file |
读取file并在当前行的下一行插入 |
:nr file |
读取file并在第n行的下一行插入 |
:r !ls –a这是将外部命令读取并插入到当前行的下一行。可以类推其他外部指令的读取插入。
(14).选择性保存
将光标移动到想要保存部分的开头或结尾,按v进入可视模式,然后移动光标,将想要保存的部分全部选中(呈高亮状)。接着按:字符,底部出现:’<,’>后输入w newfile,newfile是一个未被使用的文件名。这时被选中的部分将会被保存到newfile中。
同样再被选中状态下,按d将会删除选中部分,按y复制选中部分。
(15).帮助信息
按下键盘上(如果有)<HELP>,<F1>键,或者输入:help。可以用Ctrl+W在窗口间跳转,:q关闭帮助窗口。
当然可以提供一个正确的参数给:help命令,帮助找到该主题,例如:help user-manual。
由于打开的一样是vim编辑器,所以以上命令一样可以使用。
(16).启用vim特性
在vim编辑器下启用vim特性。Unix系统使用的命令:edit ~/.vimrc,MS-Windows系统使用的命令:edit $VIM/_vimrc。接着读取vimrc示例文件:r $VIMRUNTIME/vimrc_exaple.vim。保存文件命令:write。下次启动vim时,编辑器就会有语法高亮功能,更多了解输入:help vimrc-intro。
在vim编辑器外部启用vim特性。使用vim /etc/vimrc(影响所有用户)或vim ~/.vimrc(只影响自己)。
(17).补全功能
确保vim不是在以兼容模式运行:set nocp。
总共有两种补全方法:Ctrl+D和<Tab>键。举例说明,如果输入:e,按Ctrl+D将会显示所有以e开头的命令,<Tab>键会补全命令为匹配中第一个命令。
(18).可视化模式的简单用法
可视化模式又叫V模式或列模式,一般会在编写shell脚本时使用,用于多行注释。<Ctrl>+v可以进入到可视化模式下
多行注释的使用方法如下:
1)<Ctrl>+v进入可视化模式
2)向上或向下移动光标,把需要注释的行开头选中
3)按下大写的I
4)然后再插入注释符号,如#
5)按<Eac>退出编辑,等待几秒即可注释完成
如果想删除多行注释,只需进入可视化模式,选中行开头,按下d等待几秒即可。
Linux命令之vim(一):https://www.cnblogs.com/diantong/p/9253749.html
Linux命令之vim(二)的更多相关文章
- Linux命令-磁盘管理(二)
Linux命令-磁盘管理(二) Linux mmount命令 Linux mmount命令用于挂入MS-DOS文件系统. mmount为mtools工具指令,可根据[mount参数]中的设置,将磁盘内 ...
- Linux命令汇总(二)
1.登录用户设置 新创建了一个用户,用useradd指令,但是发现通过终端无法登陆: echo password | passwd --stdin username 或者 passwd --st ...
- Linux命令基础(二)
一.列表显示目录内容-ls 1.显示目录中内容,包括子目录和文件相关属性信息 ls(列表的形式去显示目录内容) [选项](可有可无的) ...
- Linux 命令整理 vim
Vim 一.官方网站 http://www.vim.org 二.背景 所有的 Unix Like 系统都会内建 vi 文书编辑器,但是在我们编程这里开发使用最多的要数 vim命令了. 三.操作 三种 ...
- Linux命令vi/vim 使用方法讲解
vi/vim 基本使用方法 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的 ...
- linux命令--vi,vim
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件.并将光标置于第n行首 vi + filename :打开文件.并将光标置 ...
- Linux命令vi/vim编辑
一.vi的基本概念基本上vi可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:a) 命令 ...
- Linux命令(十二) 分割文件 split 合并文件 join
一.分割文件 split 命令介绍 当处理文件时,有时需要将文件做分割处理,split 命令用于分割文件,可以分割文本文件,按指定的行数分割,每个分割后的文件都包含相同的行数.split 可以分割非文 ...
- Linux命令(十二)制作静态库和共享库
1. 静态库 静态库文件命名:libxxxx.a 1.1 步骤: ar rcs libCalc.a *.o 1.2 用nm查看文件内容 1.3 发布并使用 gcc main.c -o mycpp.ou ...
随机推荐
- [NOIP2017 TG D2T2]宝藏(模拟退火)
题目大意:$NOIPD2T2$宝藏 题解:正常做法:状压DP .这次模拟退火,随机一个排列,$O(n^2)$贪心按排列的顺序加入生成树 卡点:没开$long\;long$,接受较劣解时判断打错,没判$ ...
- [NOIP2016]愤怒的小鸟 DP
---题面--- 题解: 首先观察数据范围,n <= 18,很明显是状压DP.所以设f[i]表示状态为i时的最小代价.然后考虑转移. 注意到出发点(0, 0)已经被固定,因此只需要2点就可以确定 ...
- NOI2018 D1T1 [NOI2018]归程 解题报告
P4768 [NOI2018]归程 题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 \(n\) 个节点.\(m\) 条边的无向连通图(节点的编号从 \ ...
- gitlab7.2安装
系统:centos6.4 1.安装依赖包 导入epel: useradd git wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-rel ...
- JS知识总结
1.javascript继承机制 原型继承,访问对象属性时,如果对象内部有就返回,找不到就会从对象原型指向的对象原型中查找,一层一层的查找,直到最顶层的对象原型还找不到,就返回undefined. 2 ...
- Linux基础(1)
一.Linux的安装及相关配置 1.VMware Workstation安装CentOS7.0 图文版 详细步骤可以看连接:http://blog.csdn.net/alex_my/article/d ...
- 解决mysql报错:- Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ'
mysql执行报错: - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c ...
- NYOJ 170 网络的可靠性 (数学)
题目链接 描述 A公司是全球依靠的互联网解决方案提供商,也是2010年世博会的高级赞助商.它将提供先进的网络协作技术,展示其"智能+互联"的生活概念,同时为参观者提供高品质的个人体 ...
- 说出JAVA中一些常用的类,包,接口,请各举5个~~~
类:1.java.lang.Object2.java.lang.String3.java.lang.System4.java.io.file5.java.io.FileInputStream6.jav ...
- ZigBee PHY层
1. 介绍 ZigBee PHY层,即IEEE 802.15.4 PHY层,这里主要介绍了802.15.4-2003版本 PHY主要实现了如下功能 - 启动和关闭RF收发器 - 信道能量检测(Chan ...