① vi/vim操作手册
vi/vim 分为三种模式:命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。
启动vi/vim便进入了命令模式。此状态下键盘指令会被识别为命令而不是字符。
常用命令:
在命令模式中按下i就进入了输入模式,也叫编辑模式,可以直接编辑文本。
按ESC回到命令模式。
在命令模式下按下 : 就进入了了底线命令模式。
② VI和VIM命令的操作
vi编辑器是分为三种状态的
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
[Ctrl] + [d] 屏幕‘向下’移动半页
[Ctrl] + [u] 屏幕‘向上’移动半页
0 或功能键[Home] 这是数字‘ 0 ’:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
gg 移动到这个档案的第一行 (常用)
n<Enter> n 为数字。光标向下移动 n 行(常用)
n<space> 那个 n 表示‘数字’,光标会向右移动这一行的 n 个字符。
n<Enter> n 为数字。光标向下移动 n 行(常用)
/word 向下寻找某个单词
?word 向下寻找某个单词
n 向下重复执行搜索命令
N 向上重复执行搜索命令
dd 删除游标所在的整列
yy 复制游标所在那行
. 重复上一个动作
主要为一般模式到编辑模式的切换
i,I a,A o,O r,R 都可以实现到编辑模式的切换
其中r,R实现的是取代模式
Esc 为推出编辑模式回到常用模式
:w 编辑的数据写入硬盘
:w! 如果未见为只读的时候强制写入
;q 离开
:q! 不储存强制离开
:wq 储存后离开
:wq! 储存后强制离开
ZZ 若档案没有动过则直接离开,若档案已动过则保存离开
:set nu 设置行号
:set nonu 取消行号
③ Linux下vim编辑器命令大全
vim可以分为三种状态,分别是 命令行模式(command mode) 、 输入模式(Insert mode) 和 底行模式(last line mode) ,这 3 种工作模式可随意切换,如下图所示。
使用vim编辑文件时,默认处于命令行模式。此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。
下图所示是vim处于命令行模式的状态示意图。
在输入模式下,vim可以对文件执行写操作,类似于在Windows系统的文档中输入内容。
使vim进行输入模式的方式是在命令模式状态下输入 i 、 I 、 a 、 A 、 o 、 O 等插入命令(各指令的具体功能下表所示),当编辑文件完成后按 esc 键即可返回命令模式。
下图所示为vim处于输入模式模式下的示意图。
底行模式用于对文件中的指定内容执行保存、查找或替换等操作。
使vim切换到底行模式的方法是在 命令行模式 状态下按 : 键(注意是英文符号),此时vim窗口的左下方出现一个 : 符号,这是就可以输入相关指令进行操作了。
指令执行后vim会自动返回命令行模式。如想直接返回命令行模式,按 esc 即可。
下图所示为vim进入底行模式后的状态。
对于新手来说,经常不知道自己处于什么模式。不论是自己忘了,还是不小心切换了模式,都可以按一次 esc 键返回命令行模式。如果你多按几次 esc 键后听到"嘀————"的声音,则代表你已经处于命令行模式了。
打开文件
打开文件时光标处于文件尾部
打开文件时,光标定位到第几行
字符移动
这些移动键都可以加上数字(5h:向左移动5个字符格)
单词移动
行内跳转
行间移动
在底行模式下,直接给出行号,实现跳转
用法:起始地址,结束地址 s @要替换内容@替换后内容@gi(@分隔符)
例 :1,$s/a/A/g 把文件中全部的a换替换成A,全局替换
显示取消行号
设定自动缩进(写脚本时)
查找到的文本高亮显示
语法高亮
/etc/vimrc :全局配置文件,永久有效
~/.vimrc :个人配置文件,每个用户的家目录中,若不存在,手动创建
对于第一次用vim的童鞋,有几点需要提醒一下:
④ 深入理解vim编码设置
vim的使用环境比较复杂,可以通过terminal在本地使用(比如Mac或Linux主机),也可以ssh连接到远程服务器使用,还可以使用gvim。这里主要讨论terminal下的使用,搞清楚了vim在terminal下的编码设置,gvim相对更简单,自然也就了解了
首先我们要理解字符和字节的区别,字符是用来显示的,而字节是存储和传输时使用,网络传输的是字节流,文件存储的也是字节流,而编辑器要显示文件内容,就需要转化为字符来显示,字符和字节之间的关系可以定义如下
可见encode和decode是一对逆向操作,它们都需要指定编码方案,如果编码方案不一致,则会操作失败
通过terminal操作远程vim时,其数据流向可以表示如下
在这个流向里,只有terminal和vim需要显示字符,其它进程或服务只是做数据传输,如果只是单纯传递二进制数据,是不需要涉及编码解码的,只有当显示字符的时候才需要进行解码,因此只有terminal和vim需要配置编码,而terminal需要和本地shell打交道,远程vim也需要和shell打交道,shell的编码也至关重要
terminal本身也是一个进程,最终的字符显示都需要由terminal来完成,我们在terminal上输入字符也会由它进行编码之后再传递,简单来说就是
这里编解码方案就是terminal需要配置的
locale命令也可查看shell编码设置,以LC_开头的代表系统不同类别的编码方案,分为如下几类
至于最终选什么方案,其优先级如下
也就是说一切都以LC_ALL为主,如果没有设置,则查找LC_*对应的设置项,如果仍旧没有,则使用LANG的设置,影响字符显示的为LC_CTYPE项,为了便于描述,后续提到shell编码时一律指LC_ALL项,设置shell编码方式如下
假设我们本地terminal编码设置为UTF-8,shell编码设置为GBK,当我们在terminal上输入中文字符时,会显示为乱码或不显示
我们分析一下在终端输入shell命令时的数据交互
将terminal和shell看做两个服务,它们之间需要进行数据交互,在发送数据时进行编码,在收到数据时会进行解码,如果编码方案和解码方案不一致,就会导致乱码或失败,表现形式就是在terminal上输入中文命令时会显示异常,执行结果也不符合预期
如果用ssh登陆远程shell,则远程shell的编码配置和本地shell一致,在通过 ssh -v 可以打印ssh在登陆过程中做了哪些事
因此我们第一个要点是
vim和编码相关的有4个设置项
可见vim的编码设置相当复杂,我们还是以具体的实例来分析这些编码设置的作用
不管是打开本地vim,还是打开远程vim,我们首先保证本地shell的编码设置和terminal一致,这样涉及到编解码的数据流可以简化为
vim打开文件,最终还是在terminal上显示,这个过程和编码设置相关的有
可见vim在打开文件并显示的过程中有大量的编码转化操作,将二进制从编码A转化为编码B的步骤为
最终输出仍旧为字节流,如果A和B不同,则输出字节流和输入就不一样(ascii字节流除外,在所有编码方案里ascii字符对应的字节流都是一样的)。转换成功的前提是,decode所采用的编码方案必须和输入字节流编码方案一致,也就是说如果输入字节流是采用C编码方案生成的,采用A编码方案去解码就会失败
如果vim的某些编码项没有设置,会使用其依赖项的设置或默认设置,依赖关系如下
vim的这些编码设置项里通常我们只设置fileencodings和encoding,如果只在中英文环境下使用,可设置如下
encoding一定要设置utf8,因为utf8可以表示所有字符
假设terminal编码设置为gbk,vim的encoding为utf8,此时我们打开一个文件,不管这个文件是utf8还是gbk编码,它都无法正常显示
前面提到,vim的termencoding默认会继承encoding的设置,对应前面打开文件的步骤如下
如果要正常显示,只需要临时修改vim的termencoding编码和terminal编码一致即可,termencoding只涉及到显示,不涉及文件内容的改变,切勿修改encoding项,准确来说,在任何时候都不要试图修改encoding设置
因此我们的第二个要点是
如果说打开文件的数据流是从vim到terminal,那修改文件则是从terminal到vim再到terminal这么一个来回
和编码相关的步骤如下,打开文件显示的过程前面已经描述过,这里只说修改和保存的过程
fileencoding有两种情况
由上可见,encoding方案编码的数据在vim中是一个中转站,接收数据时(从文件读取或从终端输入)都要转化为encoding编码方案,保存文件时再由encoding编码方案转化为fileencoding编码方案。因此encoding必须设定为一个能表示所有字符的编码方案,通常我们设置为utf8
假设terminal和shell的编码设置均为gbk,vim的encoding设置为utf8,如果想正常输入和显示字符,必须将termencoding设置和terminal编码一致,这是不管是显示字符还是输入字符保存文件,都可以正常工作
我们可以设置编码不一致只是为了演示编码的影响,在实际环境中,必须保证这些编码设置都一致,因此终极要点是
⑤ vim与正则表达式
纯文本文件 :由ASCII, Unicode 或其它编码的纯文字的文件
文本文件编辑工具:
vi ——Visual editor,文本编辑器
vim ——VIsual editor iMproved ,和vi 使用方法一致, 但功能更为强大
vim分很多种工作模式,操作之前 首先明确当前处于哪个模式
首要快捷键:模式之间相互切换
说明:
打开vim默认进入命令模式,所有按键操作在屏幕上不可见!!!
命令模式功能强大,只是 按键时看不到输入内容 ,所以需要大量的记忆才能更好的使用
ZZ 保存并退出
ZQ 不保存退出
字符间跳转:
单词间跳转:
句间移动:
段落间移动:
行间移动:
行首行尾跳转:
当前页跳转:
命令模式翻屏操作:
在命令模式下也能进行部分编辑操作
y 复制,行为相似于d剪切
同理也可以结合光标跳转字符,实现范围操作
!!!应注意:单独按 d 或 y 是不起作用的
与 d 的功能完全一致,但是 完成操作后自动切换到插入模式
比如:
cc :即为删除本行并进入插入模式,cc=S
C:删除当前光标到行尾,并切换成插入模式,相当于c$
特别地: 范围操作
按“ : ”进入Ex模式 ,创建一个命令提示符: 处于底部的屏幕左侧
以行为基本单位
地址定界后跟一个编辑命令,即可进行批量范围操作
特别地,s///也可以换为s@@@...等其他字符
以上所有设置的关闭方式相同:set noCMD
永久保存设置,保存在配置目录
用方向键和其他字符跳跃快捷键模拟鼠标选中操作
被选中的文字可被删除,复制,变更,过滤,搜索,替换等
进入此模式的快捷键:
单个文件切割后 相当于两个窗口同时显示同一个文件
寄存器即为 多个剪贴板
有26个 字母命名 寄存器和1个 无命 名寄存器,常存放不同的剪贴版内容, 可以不同会话间共享
未指定,将使用无命名寄存器, 即为普通的复制粘贴操作
还有10个 数字寄存器 ,用0,1,…,9表示,0存放最近复制内容,1存放最近删除内容
当新的文本变更和删除时,1转存到2,2转存到3,以此类推
数字寄存器不能在不同会话间共享
作用是标记书签
输入ma :将当前位置标记为a
输入 'a 跳转到a标记的位置
26个字母均可做标记, mb 、 mc 等等
qa 录制宏 a,a为宏的名称
q 停止录制宏
@a 执行宏 a
@@ 重新执行上次执行的宏
录制宏 是录制位置还是录制一系列操作???
涉及 xxd 命令
1、在vim中设置tab缩进为4个字符
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
3、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行 的行首的#号
cat 可以查看文本内容
特别地,若无指定文件 或文件名为 - ,表示从标准输入接收信息
Windows中的文本文件与Linux中格式有所不同
对于一些类似换行、Tab...等不可见字符,可使用 -A 选项进行显示
两种逆向显示:
文本 篇幅较大 时,用cat查看不太方便,此时应使用more命令
使用more命令查看, 移动到最后一行时自动退出
为了反复查看文件,可使用less命令 (less终端内 不显示进度百分比 )
与管道配合使用
若已知输出结果会是大篇幅内容,可提前用管道连接more或less
大篇幅文件,若 只需要查看前几行 ,可使用head命令
不指定行数,head默认输出前10行
特别地,行数为负数时,如head -n -5 表示 去除最后5行
与之相反,tail命令则表示 显示文件指定的最后几行
不指定默认输出最后10行 ,同样也支持 -c 字节数
特别地, tail命令行数前使用 + 号 ,如 -n +3 表示 从第3行往后全部输出
@@tail实用功能( -f 选项):持续监测文件是否有追加内容
cut 命令 以指定分隔符 对文本文件或STDIN数据的 每行内容进行切割
默认分隔符为TAB
三种类似功能:指定 字节b/字符c/字段f 序号或范围
不常用功能:-b 、 -c
-nb的作用:防止切割多字节字符(可认为等效于-c)
#已知每个汉字大小为3byte!!!
常用功能:-f(需要先用-d指定分隔符,不指定则为tab)
其他功能: 在输出结果中指定需要显示的分隔符
其他功能: 取反 complement
默认以行为单位 ,合并多个文件同行号的列到一行
合并文件的 拼接处默认以TAB分隔
对指定文本文件或STDIN的 各项指标进行统计
包括:文件的行总数、单词总数、字节总数和字符总数
不加选项时默认统计前三项
应用举例:
对文件的所有 行进行排序
默认:数字在字母之前、字母排序不分大小写
以行为单位去除重复内容(只去除连续重复行)
对比分析两个普通文件的不同之处 (命令cmp比较两个 二进制文件 的区别)
选项 -y可以并排对比 -W指定并排的间距
选项 -u 用来输出统一的(unified)diif格式文件 (适合用于补丁文件)
patch命令 :利用diff比较结果输出的内容进行 还原
cmp命令 :比较二进制程序的源码不同之处
排除过滤 - v :
grep默认只显示符合条件的行,- v 选项 只显示不符合条件的内容
**忽略大小写- i **:gerp默认大小写敏感,- i 选项忽略大小写
显示行号 -n :文本过多时,显示行号方便查看
(显示 匹配结果在原文中的行号)
**显示行数量 - c **, 只显示有多少行符合条件
- o 只显示keywords :- o 只显示所有匹配的内容,可知 keywords数量
静默模式:- q 选项 执行命令但不输出结果,常用于脚本条件判断
ABC匹配结果附带前后行一起输出
选项 - e 多个条件满足其一 ( 几个条件就有几次 - e )
特别地, - E 表示使用扩展正则表达式
选项 - w 匹配单个单词
单词判断依据——字母数字下划线连续组合都视为单词
单词判断依据——字母数字下划线连续组合都视为单词
单词判断依据——字母数字下划线连续组合都视为单词
正则表达式把字符和次数分开表达
正则表达式把字符和次数分开表达
正则表达式把字符和次数分开表达
正则表达式把字符和次数分开表达
基本格式为 引号 括起来:
正则表达式的 元字符按功能分四类 ,下面分别介绍
指定某个内容出现的具体次数(keyword写在前)
只匹配前一个紧挨着的字符!!!!! !!!!!!!!!!!!!
在指定位置搜索 字符串
分组:将多个字符 作为整体 来进行处理
普通分组用法:
后向引用: 使用分组之后,后续再次引用只需要 使用 1、2 等表示第一个、第二个分组
最适合用于vim搜索替换(形如 r..t 替换成 r..ter 的情况)
逻辑 或
除了使用选项 - e 还有符号 | (其中用来转义)
为了在复杂规则中更加直观, 省略了转义符
⑥ 怎样让vim显示VISUAL 模式下选中的字符数
1、首先vi命令打开要修改的文件;
2、在打开文件后,默认的是浏览模式,即非编辑模式;
3、在非编辑模式下输入斜杠:/;
4、在/后输入你要找的那个字符,例如:/
,输入完成后回车;
5、如果文件中存在这个关键字,那么光标会自动定位到这个关键字上;
6、此时文件还是处于非编辑模式,连续按两次键盘上的
“d”键,即可删除所在的行;
7、然后按键盘上的字母“n”键,可以继续在文件中查找这个关键字,查到后,重复步骤6删除行的操作即可。
⑦ vim 如何实现给每个汉字后面加一个空格字符
题主你好,
测试内容及指令:
=====
希望可以帮到题主, 欢迎追问.
⑧ vim中如何查找和替换字符串
一、 字符串的查找
1. vim 中用 / 和 ? 来查找字符串,两者的区别是:
/string 会高亮显示光标后匹配的第一个字符串,回车后光标移到该字符串的第一个字母;
string 会高亮显示光标前匹配的第一个字符串,回车后光标移到该字符串的第一个字母。
在回车之后,按n键同方向转到下一个匹配的字符串,按N键反方向转到上一个匹配的字符串。
2. 用命令 :set ic 和 :set noic 来分别设置查找时不区分和区分大小写。
如果查找特殊字符,如 ^、$、*、/ 和 .,需要在前面加 \ 来转义。
二、字符串的替换
1. vim 中可用 :s 命令来替换字符串,具体如下:
:s/str1/str2/ 替换当前行第一个 str1 为 str2
:s/str1/str2/g 替换当前行中所有 str1 为 str2
:m,ns/str1/str2/ 替换第 n 行开始到最后一行中每一行的第一个 str1 为 str2
:m,ns/str1/str2/g 替换第 n 行开始到最后一行中所有的 str1 为 str2
(注:m和n 为数字,若m为 .,表示为当前行开始;若n为$,则表示到最后一行结束)
如果使用 # 作为分隔符,则中间出现的 / 不会作为分隔符,比如:
:s#str1/#str2/# 替换当前行第一个 str1/ 为 str2/
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
2. 其他:%s/str1/str2/(等同于 :g/str1/s//str2/) 替换每一行的第一个 str1 为 str2
:%s/str1/str2/g(等同于 :g/str1/s//str2/g 和 :1,$ s/str1/str2/g ) 替换文中所有 str1 为 str2
从替换命令可以看到,g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索
⑨ vim使用指南
命令行模式:进入vim后的默认模式,用户可以输入vim命令来管理自己的文档,此时从键盘上输入任何字符都会当成编辑命令,输入合法的vim命令,vim会完成相应的动作
文本输入模式:在命令模式下输入i/I 或者a/A 进入输入模式,就可以在文本文件内输入内容了,按下ESC则回到命令行模式
末行模式:在命令行模式下输入:进入末行模式
一般进入vim 都是vim后面跟着文件名
如
如果当前文件夹下没有此文件,则会在目录下新生成此文件
注:如果你直接vim进入编辑器,而没有跟文件名,他也会进去,但是你退出时需要指定文件名称
如果你想进入编辑器中的具体某一行(指光标所在的行)
需要进入文本输入模式
命令模式下输入i进入文本输入模式可以输入内容了,在光标所在字符之前进行插入
输入I 是在光标所在行行首进行输入
输入a是在光标所在字符的后面进行插入
输入A是在光标所在行行末进行输入
输入o在光标所在行下面插入一空行
输入O在光标所在行上面插入一空行
你可以在输入模式下按Delete或者退格键(Backspace)进行删除文本,我将介绍一些在命令行下如何删除文本
x —— 删除光标所在的字符
X —— 删除光标所在字符前面的字符
D或者d$ ——删除光标所在位置到行末的字符
dd——删除光标所在一行
yy——复制光标所在行
Y——复制光标所在位置到行尾
y0——复制光标前一位到行首
p——粘贴
v/V——选中文本
u/U——撤销
.——重复上次执行的命令
需要进入文本末模式
:q——退出
:q!——强制退出
:w——保存
:wq——保存并退出
j——向下
k——向上
h——向左
l——向右
H——前面加数字代表光标移动到哪行行首,(当前屏幕)
M——移动到文本中间,或者屏幕中间行的行首
L——移动到文本末或者屏幕底部行行首,可以加数字
G——不受屏幕限制,是文本的行数
:set number ——设置行号
/string ——查找命令
⑩ 用vim 在哪里执行命令字符乱码了,需要切换编码
windows版的vim配置文件可以在安装目录的_vimrc文件中。比如我装的是vim7.2安装目录是d:盘的programfile\vim下,执行程序在安装目录下的vim72目录中(d:\programfile\vim\vim72),配置文件就放在d:\programfile\vim目录下,配置模版可以从d:\programfile\vim\vim72\vimrc_example.vim拷贝。在配置文件中加入
set fileencodings=ucs-bom,utf-8,cp936,gb18030
set encoding=cp936
就可自动识别文件编码。