vim编辑器的使用

201 阅读7分钟

Vim编辑器使用

5.1 vim的使用

5.1 vim主要模式介绍,vim命令模式。

确保系统已经安装了VIM工具

[root@test ~]# rpm -qf which vim

[root@test ~]# rpm -qf which vi

如果你是最小化安装的,默认已经安装了vi这个工具,vim是没有安装的

如果你是图形化安装的,默认vi和vim两个工具都已经安装好了

[root@test ~]# rpm -qf `which vim`
vim-enhanced-7.4.160-5.el7.x86_64
[root@test ~]# rpm -qf `which vi`
vim-minimal-7.4.160-5.el7.x86_64
[root@test ~]# mount /dev/sr0 /media/
mount: /dev/sr0 is write-protected, mounting read-only
[root@test ~]# cd /media/Packages/
[root@test Packages]# rpm -ivh vim-enhanced-7.4.160-5.el7.x86_64.rpm 
warning: vim-enhanced-7.4.160-5.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
	package vim-enhanced-2:7.4.160-5.el7.x86_64 is already installed

扩展:

  1. vi和vim不是同一个安装包
  2. vim是vi的增强版,最明显的区别就是vim可以语法加亮,它完全兼容vi
5.1.1 Vim管理模式

Vim的一个不同寻常之处是它有几个运行模式,包括命令模式,扩展命令模式,编辑模式,可视模式

  1. 首次进入文件 ---------> 以命令模式启动
  2. 通过单击不同字符可以进入到其它模式,如a i o A I O
  3. 在左下角出现“Insert”提示符 -----> 说明此时处于编辑模式
  4. 在左下角出现“VISUAL”提示符 -----> 说明此时处于可视模式

按键说明:

i 当前字符之前插入 (光标前)

I 行首插入 (行首)

a 当前字符之后插入 (光标后)>

A 行尾插入(行尾)

o下一行插入 (另起一行)>

O上一行插入(上一行插入)

x 向后删除一个字符 等同于delete

X 向前删除一个字符

u 撤销一步 每按一次就撤销一次

r 替换>

5.1.2 在一般模式下做的操作

光标定位

h j k l 左下上右

0(数字零) 和 home键表示切换到光标所在行的行首, $和end键表示切换到光标所在行的行尾

gg 快速定位到文档的首行 , G定位到未行(文件最后一行)

3gg或者 3G 快速定位到第3行

/string(字符串) 找到或定位你要找的单词或内容,如果相符内容比较多,我们可以通过N、n来进行向上向下查找,并且vi会对查找到的内容进行高亮显示,取消用 :noh,还有一种方法取消高亮显示,就是去搜索一个当前文件中并不存在的特殊字符就可以了

/^d -->^意思表示以什么开头 ,,查找以字母d开头的内容

/t$ --->$意思表示以什么结尾,,查找以字母t结尾的内容

vim + a.txt 打开文件后,光标会自动位于文件的最后一行

如何对文本进行编辑

删除、复制、粘贴、撤销

y 复制(以字符为单位) :表示对单个字符进行复制,如果要复制整行,用yy(以行为单位)

复制N行: Nyy ,比如:2yy ,表示复制2行,从你光标所在行开始向下计算

dd(删除,以行为单位,删除当前光标所在行)

删除N行: Ndd ,比如: 2dd ,表示删除2行

p : P粘贴

剪切: dd

x 删除光标所在位置的字符

D 从光标处删除到行尾

u 撤销操作

ctrl+r 还原撤销过的操作,将做过的撤销操作再还原回去,也就是说撤销前是什么样,再还原成什么样

r 替换,或者说用来修改一个字符

总结:

vim如何进入其它模式
a A  o O  i I 都是可以进行插入,编辑模式
: 进入命令行模式
v 进入可视模式
ctrl+v 进入可视块模式
V 进入可视行模式
R 擦除、改写,进入替换模式
你进入以上模式后,想要退出 ,按esc

扩展:补全操作在编辑模式中进行

ctrl+p 可以进行补全操作,前提是只能在你打开的这个文件中有的内容,它只针对当前打开的文件有效(vi命令打开的文件是不能使用的,vim命令打开的才可以)

5.1.3 V模式(列)

可视模式是一种突出显示和操作文件的绝佳方式,它有以下三种击键操作:

  • 字符模式:v 可以突出显示文件块中的句子
  • 行模式: shift+v 选择可视行模式后,会在屏幕左下角出现"VISUAL LINE"一词
  • 块模式: ctrl+v 选择可视块模式后,会在屏幕左下角出现"VISUAL BLOCK"一词

范例1:批量注释多行

  1. ctrl+v 进入可视块编辑模式

  2. 向下或向上移动光标,把需要注释、编辑的行的开头(如果是执行删除操作的话,你可以按需选择)选中起来

3)如果需要删除的话,就直接输入x键进行删除

  1. 如果要添加内容,就按大写的I

  2. 再插入注释符或者你需要插入的符号,比如"#"

  3. 再按Esc,就会全部注释或添加了

范例2:批量删除指定字符

再按ctrl+v 进入列编辑模式;向下或向上移动光标 ;选中注释部分,然后按d, 就会删除注释符号。

5.1.4 命令模式操作

通过输入一个冒号切换到这个模式

:w保存 save

:w!强制保存

:q没有进行任何修改,退出 quit

:q!修改了,不保存,强制退出

:wq 保存并退出

:wq!强制保存并退出

:x 保存退出

例: wq! 强制保存并退出

[root@test63 ~]# ll /etc/shadow

----------. 1 root root 1179 9月 19 12:57 /etc/shadow

[root@test63 ~]# vim /etc/shadow

调用外部文件或命令

假设:我想要写入我的网卡MAC地址,,我要查看一下,当前在vim编辑文档,照着写。这样好麻烦。

在命令行模式下操作:

:!ifconfig 调用系统命令

!+命令

读取其他文件。(把其他文件中的内容追加到当前文档中)

:r /etc/hosts

文本替换

格式 : 范围(其中%所有内容) s分隔符 旧的内容 分隔符 新的内容 (分隔符可以自定义)

默认是每一行的第一个符合要求的词 (/g全部)

命令说明
:1,3 s/bin/test替换第1到3行中出现的第一个bin进行替换为test
:1,3 s/bin/test/g替换第1到3行中查找到所有的bin进行替换为test
:3 s/xue/aaaaa只把第3行中内容替换了
:% s/do/test/g将文本中所有的do替换成test
:% s/do/test/gi将文本中所有的do替换成test, 并且忽略do的大小写
:% s@a@b@g将文本中所有的a替换成b
5.1.5 自定义vim使用环境

临时设置

:set nu 设置行号

:set nonu 取消设置行号

:noh 取消高亮显示

永久设置环境

vim /etc/vimrc 设置后会影响到系统所有的用户

~/.vimrc # 在用户的家目录下,创建一个.vimrc文件,这样只影响到某一个用户,没有自己建一个

[root@test63 ~]# echo "set nu" > /root/.vimrc

查看文件测试,它默认会自动添加行号上去

vim打开多个文件

方法1:以上下形势,打开两个文档

[root@test63 ~]# vim -o /etc/passwd /etc/hosts

方法2:以左右方式打开两个文档

[root@test63 ~]# vim -O /etc/passwd /etc/hosts

注:ctrl+ww 在两文档之间进行切换编辑。大写O左右分屏,小写的o上下分屏

比较两个文件内容

[root@test63 ~]# cp /etc/passwd mima.txt

[root@test63 ~]# echo aaa >> mima.txt

[root@test63 ~]# diff /etc/passwd mima.txt

40a41
​
> aaa

[root@test63 ~]# vimdiff /etc/passwd mima.txt

5.2 实战1

在windows中编辑好的汉字文本文档,上传到Linux下打开乱码。

实验环境:centos7.4 现在系统默认使用的语言是汉语。(系统中必须安装好中文包)。

将同目录下“a此文件在windows下打开正常-到linux下vim打开是乱码.txt”上传到Linux服务器上。使用ssh远程连接到Linux上,使用vim打开显示乱码。

原因:编码的问题

通过iconv命令转码

参数:

-f, --from-code=名称 原始文本编码 ​ -t, --to-code=输出编码 ​ -o, --output=FILE 输出文件名

[root@test63 ~]# mkdir test  # 创建一个测试目录

[root@test63 ~]# cd test/

将测试的文件上传到Linux服务器上:

[root@test63 ~]# iconv -f gb2312 -t utf8 a此文件在windows下打开正常-到linux下vim打开是乱码.txt -o aa.txt

[root@test63 ~]# cat aa.txt

#!/bin/bashecho "学神IT"

选项:-l, --list 列举所有已知的字符集

5.3 实战2

解决将公司Linux服务器上脚本导到windows上打开串行的问题

原因:因为windows和linux处理回车方法不同。

上传" b在Linux编辑的文档到windows下没有换行.sh " 到Linux上,打开后正常显示

[root@localhost test]# sz b在Linux编辑的文档到windows下没有换行.sh # 发送到本地

在window 上打开显示:

解决方法:

[root@test63 ~]# rpm -ivh /mnt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm

注: 在centos7上,unix2dos这个命令已经被集成到dos2unix-6.0.3-7.el7.x86_64.rpm包中。在centos6下需要安装unix2dos.xxx.rpm

[root@localhost test]# unix2dos b在Linux编辑的文档到windows下没有换行.sh

[root@localhost test]# sz b在Linux编辑的文档到windows下没有换行.sh #发送到windows本地 显示正常

[root@test63 opt]# unix2dos b.txt

unix2dos: converting file b.txt to DOS format ...

注:dos2unix 这个命令是把windows下的回车转成linux类型。