Linux学习:vim程序编辑器

Stella981
• 阅读 655

本次记录vim这款文本编辑器的使用方法及它有哪些使用实例等。

基本概念

在Linux环境中,配置文件对整个系统来说具有举足轻重的作用,而对于其都是以ASCII的纯文本形式存在,而利用文本编辑器就能够达到方便修改配置的目的。

vi是UNIX操作系统和UNIX Like操作系统中最通用的全屏幕纯文本编辑器。而Linux中的vi编辑器叫vim,它是vi的增强版(vi improved),与vi编辑器兼容,而且实现了很多增强功能。

vim的有哪些特点:

1. 所有的UNIX Like系统都会内置的文本编辑器,其他的文本编辑器则不一定会存在

2. 很多软件的编辑接口都会主动调用它

3. 具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计

4. 程序简单,编辑速度相当快速

Vim的工作模式

Vim工作在三种模式下,分别是一般模式、编辑模式与命令模式。

w 一般模式(输入模式)

Vim打开一个文件就直接进入该模式(默认模式),在这个模式中,可以使用上下左右键移动光标,删除字符或删除整行,也可以复制、粘贴你的文件数据。

w 编辑模式

一般模式下无法编辑文件内容。通常在Linux中,按下“i, I, a, A, o, O, r, R”按键时,在界面的左下方会出现INSERT或REPLACE的字样,此时才可以进行编辑。

w 命令模式(末行模式)

在一般模式当中,输入“:,/,?”中的任何一个,就可以将光标移动到当前屏幕最下面那一行。在此模式下,可以提供查找数据的操作,而读取、保存、批量替换字符、离开vim、显示行号等操作也都在此模式下进行。

Vim三种模式切换的方式

1. 一般模式 –> 编辑模式(Insert Mode or Replace Mode)

i a o r I A O R

2. 编辑模式 –>一般模式

【ESC】

3. 一般模式 –>命令模式

: ? /

4. 命令模式 –>一般模式

双击【ESC】

一般模式与编辑模式及命令模式可相互切换,但编辑模式与命令模式之间不可相互切换。

Vim通用操作说明

1. 打开vim

vim /PATH/TO/SOMEFILE

请注意,vim后面一定要加文件名,不管该文件名存在与否。

vim +# /PATH/TO/SOMEFILE

#代表行号,表示进入文件后,光标直接定位第几行。

vim +/PATTERN /PATH/TO/SOMEFILE

PATTERN指定为字符串,表示进入文件后,光标直接定位到PATTERN所在的行

2. 关闭vim

在命令模式下输入有关命令退出vim。

:q 退出

:q! 不保存退出

:wq 保存退出(同x, ZZ)

Vim一般模式下操作说明

w 光标跳转

1. 字符间跳转

h: 光标向左移动一个字符

l: 光标向右移动一个字符

j: 光标向下移动一个字符

k: 光标向上移动一个字符

#COMMAND #代表数字

2. 单词间跳转

w: 光标所在位置的下一个单词词首

b: 光标所在位置的上一个单词词首

e: 光标所在位置的下一个单词词尾

#COMMAND #代表数字

3. 行内跳转

^: 跳转至行首的第一个非空白字符

0: 跳转至行首(功能HOME键)

$: 跳转至行尾(功能END键)

4. 行间移动

gg: 跳转到第一行(同1G)

G: 跳转到最后一行

n[Enter]: 当前光标所在处向下移动n行(n为数字)

#G

w 编辑命令

1. 删除命令:

x: 删除光标所在的字符(#x)

xp: 相邻字符对调

dd: 删除光标所在的整行(#dd)

dw、de、db等

2. 复制命令:

yy: 复制光标所在的整行(#yy)

y1G、yG、y0等

3. 粘贴命令:

  1. 如果此复制或删除的内容不是一个完整行

p: 粘贴至当前光标所在处后面

P: 粘贴至当前光标所在处前面

  1. 如果此复制的内容是完整行

p: 粘贴至当前光标所在行下方

P: 粘贴至当前光标所在行上方

4. 改变命令:

cc: 删除光标所在的整行,并等待用户键入新内容

c$、c0、cw等

5. 撤消命令:

u: 复原前一个操作(#u)

[Ctrl]+r: 重做上一个操作

. : 重复前一个操作

6. 翻屏操作:

[Ctrl]+[f]: 向后一屏

[Ctrl]+[b]: 向前一屏

[Ctrl]+[d]: 向后半屏

[Ctrl]+[u]: 向前半屏

Vim编辑模式下操作说明

i: insert 从当前光标处前面插入

a: append 从当前光标所在下一字符处插入

o: new line 从当前光标所在下一行插入新行

r: replace 替换光标所在的字符一次

I: 从当前光标所在行的第一个非空字符处前面插入

A: 从当前光标所在行的最后一个字符处插入

O: 从当前光标所在的上一行插入新行

R: 一直替换光标所在的文字,直到按下[ESC]键为止

Vim命令模式下操作说明

1. 地址定界范围

:start_pos,end_pos

#: 移动光标到当前第#行(可带+-号)

#,#: 从起始行起到结束行范围

#,+#:从指定的行开始向后移动#行结束

. : 当前行

$: 最后一行

%; 全文,相当于1,$

/pat1/: 定位到第一次被此模式所匹配的行(#,/pat1/)

/pat1/,/pat2/: 从第一次匹配pat1的行开始到第一次匹配pat2结束

后可跟编辑命令:d, y, w, r

2. 查找

/PATTERN: 从当前光标所在位置向尾部进行查找

?PATTERN:从当前光标所在位置向首部进行查找

n: 与命令同方向

N:与命令反方向

3. 查找替换

s: 在地址定界范围内完成查找替换操作

s/要查找的内容/替换为的内容/修饰符

要查找的内容:可使用模式

替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容

\1, \2, ...

&: 引用“要查找的内容”匹配到的整个内容

修饰符:

i: 忽略大小写

g: 全局替换

/: 用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/

分隔符可替换为其它字符:例如@,#等

:n1,n2s/word1/word2/g 在第n1到n2行之间寻找word1这个字符串,并将该字符串替换为word2

4. 保存、退出命令

:wq 将编辑的数据写入硬盘文件后退出(同x)

:wq! 若文件属性为“只读”时,强制写入且保存后退出

:q 退出vim

:q! 若曾修改过文件,又不想存储,使用“!”为强制离开不保存文件

ZZ 若文件没改动,则不保存离开。若文件被改动,则保存后离开

:w[filename] 将编辑的数据另存到一个文件中(n1,n2w[filename])

:r[filename] 在编辑的数据中,读入另一个文件的数据,即将此文件内容加到光标所在行后面

:! Command 暂时离开vim到命令行模式下执行command的显示结果

Vim多文件模式下操作说明

1. 多个文件打开

Vim FILE1 FILE2 ……

:next 进入下一个文件

:first 进入第一个文件

:prev 进入上一个文件

:last 进入最后一个文件

:files 列出目前这个vim打开的所有文件

:wqall 保存所有文件退出

:q!all 不保存强制所有文件退出

2. 多文件窗口分割

Vim –o|-O FILE1 FILE2 ……

-o: 水平分割

-O: 垂直分割

[Ctrl+w], 箭头键 指明文件方向

3. 单文件窗口分割

[Ctrl+w], s: 水平分割

[Ctrl+w], v: 垂直分割

定制Vim的工作特性

1. 行号

显示:set number

禁用:set nonumber

2. 括号匹配

显示:set sm

禁用:set nosm

3. 自动缩进

显示:set ai

禁用:set noai

4. 高亮搜索

显示:set hlsearch

禁用:set nohlsearch

5. 语法着色

显示:syntax on

禁用:syntax off

6. 忽略字符大小写

显示:set ic

禁用:set noic

Vim特性设定的永久生效方式

全局配置文件:/etc/vimrc

用户个人的配置文件:~/.vimrc (默认不存在)

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这