Linux:Day6(下) vim编辑器
vim编辑器
简介:
vi:Visual Interface,文本编辑器
文本:ASCII,Unicode
文本编辑种类:
行编辑器:sed
全屏编辑器:nano,vi
VIM - Vi IMproved
使用:
vim:模式化的编辑
基本模式:命令模式;
输入模式:
末行模式: 内置的命令行接口
打开文件:
vim [OPTION]... FILE... 注:vim 后面跟的文件名如果不存在会自动创建一个,但只能是基名不存在。
+#:打开文件后,直接让光标处于第#行的行首;
+:打开文件后,直接让光标处于最后一行第一个非空字符处。
+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;
模式转换:
编辑模式 --> 输入模式:下面这些快捷键也是在编辑模式下有效,键入之后会进入输入模式,模式会转变,当真正转换到输入模式就没用了。
i:insert,在光标所在处前面插入;
a:append,在光标所在处后面输入;
o:在当光标所在处的下方打开一个新行;
I:在当前光标所在行的行首输入;
A:在当前光标所在行的行尾输入;
O:在当光标所在处的上方打开一个新行;
c:
C:
输入模式 --> 命令模式
ESC
编辑模式 --> 末行模式
:
末行模式 --> 编辑模式
ESC,想快速回去连敲两次ESC
关闭文件:
:q 退出
:q! 强制退出,丢弃做出的修改;
:wq 保存退出
:x 保存退出
:w /PATH/TO/SOMEWHERE
ZZ:保存退出;命令模式下用
光标跳转:下面这些快捷键都是在命令模式下使用的,但使用之后模式不会转变,输入模式下无法实现相关功能。
字符间跳转:
h, j, k, l 左,下,上,右
#COMMAND:跳转由#指定的个数的字符;
单词间跳转:
w:下一个单词的词首
e:当前或下一单词的词尾
b:当前或前一个单词的词首
#COMMADN:由#指定一次跳转的单词数
行首行尾跳转:
^:跳转至行首的第一个非空白字符;
0:跳转至行首;
$:跳转至行尾;
行间移动:
#G:跳转至由#指定行;这个是文本的绝对行,并不是从光标向下多少行。例如输入100G,就是定位在100行。
G:最后一行;
1G, gg:第一行;
句间移动:
)
(
段落间移动:
}
{
vim的编辑命令:
字符编辑:
x:删除光标处的字符;
#x:删除光标处起始的#个字符;
xp:交换光标所在处的字符及其后面字符的位置;
替换命令(r,replace)
r:替换光标所在处的字符;
删除命令:
d:删除命令,可结合光标跳转字符,实现范围删除;
d$:删除光标到行尾所有内容,包括光标所在处字符;
d^:删除光标到行首所有内容,不包括光标所在处字符;
d0:删除光标到行首所有内容,不包括光标所在处字符;
dw:删除光标到下一单词词首的所有内容,单词词首处字符不删除;
de:删除光标到单词词尾的所有内容,包括光标处理字符;
db:删除光标到单词词首的所有内容,不包括光标处字符;
#COMMAND:删除指定模式(上面这些模式)的内容;
dd:删除光标所在处一整行,不保留空行;
DD:删除光标所在处一整行,保留空行;
#dd:多行删除,删除光标所在处往下指定多行;
粘贴命令(p, put, paste):
p:缓冲区中存储的如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至光前光标所在处的后面;
P:缓冲区中存储的如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至光前光标所在处的前面;
复制命令(y, yank):
y:复制,工作行为相似于d命令:
y$
y0
y^
ye
yw
yb
#COMMAND
yy:复制行
#yy:复制多行;
改变命令(c,change)
c:修改
编辑模式 --> 输入模式
c$
c^
c0
cb
ce
cw
#COMMAND
cc:删除并输入 新内容
#cc:一次删除多行
可视化模式:也是在编辑模式下进行的。
v:按字符选定
V:按行选定
Note:经常结合编辑命令;
撤销此前的编辑:
u(undo):撤消此前的操作;
#u:撤销指定次数的操作;
撤销此前的撤消:
Ctrl+r
重复前一个编辑操作:
.
翻屏操作:
Ctrl+f:向文件尾部翻一屏;
Ctrl+b:向文件首部翻一屏;
Ctrl+d:向文件尾部翻半屏;
Ctrl+u:向文件首部翻半屏;
vim自带的练习教程:
vimtutor
vim中的末行模式:
内建的命令行接口
(1)地址定界
:start_pos,end_pos
#:具体第#行,例如:2表示第2行;
#,#:从左侧#表示行起始,到右侧#表示行结尾;
#,+#:从左侧#表示的行起始,加上右侧#表示的行数;
.:当前行
$:最后一行
.,$-1
%:全文
/pat1/,/pat2/:从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束;
#,/pat/
/pat/,$
使用方式:
后跟一个编辑命令
d
y
w /PATH/TO/SOMEWHERE:将范围内的行另存至指定文件中;
r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有内容;
(2)查找
/PATTERN:从当前光标所在处向文件尾部查找;
?PATTERN:从当前光标所在处向文件首部查找;
n:与命令同方向;
N:与命令反方向;
(3)查找并替换
s:在末行模式下完成查找替换操作 注:s后面有分隔符别忘了。
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式,默认支持基本正则表达式
替换为的内容:不可使用模式,但可以使用\1,\2,...等后向引用符号;还可以使用&引用前面查找时查找到的整个内容;
修饰符:
i:忽略大小写
g:全局替换,默认情况下,每一行只替换第一次出现;
例如:.,$s/r\(..\)t/R\1T/g
%s/l...x/&er/g
%s/\/etc\/fstab/\/var\/log/g
查找替换中的分隔符/可替换为其它字符,例如:
s@@@
s###
%s@/var/log@/etc/fstab@g
练习:
1、复制/etc/grub2.cfg至/tmp/目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符; %s/[[:space:]]//g
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加 一个#号;
多文件模式:
vim FILE1 FILE2 FILE3 ...
:next 下一个
:prev 前一个
:first 第一个
:last 最后一个
:wall 保存所有
:qall 退出所有
窗口分隔模式:
vim -o | -O FILE1 FILE2 ...
-o:水平分割
-O:垂直分割
在窗口间切换:Ctrl+w ,ARROW
单文件窗口分割:
Ctrl+w,s:split,水平分割
Ctrl+w,v:vertical,垂直分割
定制vim的工作特性:
配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
末行:当前vim进程有效
(1)行号
显示:set number,简写为set nu
取消显示:set nonumber,简写set nonu
(2)括号匹配
匹配:set showmatch,简写为set sm
取消:set nosm
(3)自动缩进
启用:set ai
禁用:set noai
(4)高亮搜索
启用:set hlsearch
禁用:set nohlsearch
(5)语法高亮
启用:syntax on
禁用:syntax off
(6)忽略字符大小写
启用:set ic
不忽略:set noic
获取帮助:
:help subject
练习:
1、复制/etc/rc.d/init.d/function文件至/tmp目录;替换/tmp/functons文件中的/etc/sysconfig/init为/var/log;
2、删除/tmp/functions文件中所有以#号开头,且#号后面至少 有一个空白字符的行的行首的#号;
bash条件测试:
测试方式:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
测试表达式的类别:
数值比较
字符串测试
文件测试:
存在性测试:
-a FILE
-e FILE:文件存在性测试,存在为真,否则为假;
[ -e /etc/grub2.cfg ]
存在性类别测试:
-b FILE:是否存在且为块设备文件;
-c FILE:是不存在且为字符设备文件;
-d FILE:是否存在且为目录文件;
-f FILE:是否存在且为普通文件;
-h FILE 或 -L FILE:存在且为符号链接文件;
-p FILE:是否存在且为命令管道文件;
-S FILE:是否存在且为套接字文件;
文件权限测试:
-r FILE:是否存在且可读;
-w FILE:是否存在且可写;
-x FILE:是否存在且可执行;
文件特殊权限测试:
-g FILE:是否存在且拥有sgid权限;
-u FILE:是不存在且拥有suid权限;
-k FILE:是否存在且拥有sticky权限;
文件大小测试:
-s FILE:是否存在且非空;
文件是否打开:
-t fd:fd表示文件的描述符是否已经打开且与某终端相关;
-N FILE:文件自动上一次被读取之后是否被修改过;
-O FILE:当前有效用户是否为文件属主;
-G FILE:当前有效用户是否有文件属组;
双目测试:
FILE1 -ef FILE2:FILE1与FILE2是否指向同一个设备上的相同inode
FILE1 -nt FILE2:FILE1是否新于FILE2;
FILE1 -ot FILE2:FILE1是否旧于FILE2;
组合测试条件:
逻辑运算:
第一种方式:
COMMAND1 && COMMAND2
COMMAND1 || COMMAND2
! COMMAND
[ -e FILE ] && [ -r FILE ]
第二种方式:
EXPRESSION1 -a EXPRESSION2
EXPRESSION1 -o EXPRESSION2
! EXPRESSION
必须使用测试命令进行:
# [ -z "$hostName" -o "$hostName"=="localhost.loacldomain" ] && hostname www.magedu.com
# [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab
Linux:Day6(下) vim编辑器的更多相关文章
- 【转】Linux上vi(vim)编辑器使用教程
Linux上vi(vim)编辑器使用教程 ------------------------------------------------------------ ikong ------------ ...
- Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令
Linux系统Vi/Vim编辑器的简单介绍.安装/卸载.常用命令 1.介绍 vi(Visual Interface)编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界 ...
- Windows & Linux 安装使用 Vim 编辑器 3分钟入门 - 精简归纳
Windows & Linux 安装使用 Vim 编辑器 3分钟入门 - 精简归纳 JERRY_Z. ~ 2020 / 8 / 25 转载请注明出处! 目录 Windows & Lin ...
- linux下vim编辑器查找 关键字
在 linux vim 编辑器 下查找 关键字 方法[一] 1?short_open_tag : 它的意思是vim 打开文件的第一行 ? : 它的意思是反向查找 short_open_tag ...
- Windows下安装 Linux 下vim编辑器
Windows下安装vim编辑器 下载传送门 https://vim.en.softonic.com/download# 开始安装 这是下载后的可执行文件 双击(或单击)运行软件,选择同意继续进行安装 ...
- Linux下Vim编辑器访问系统剪切板
默认情况下VIM使用的是内置的寄存器,而不是X Window的剪切板 启用系统剪切板支持 可以使用vim --version | grep clipboard查看,若clipboard前显示-标记,而 ...
- Linux上vi(vim)编辑器使用教程
vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.vi是“visual interface”的缩 ...
- 【Linux 操作系统】vim编辑器配置及常用命令
最近工作不安分, 没有了刚入行时候的锐气, 不知道什么时候开始懈怠起来, 周末在电脑旁边看新闻, 搞笑图片, 追美剧, 一坐就是一天, 很是空虚. 我需要摆脱这种状态, 正好想学习一下安卓底层, An ...
- Linux之vi/vim编辑器
1.概述 所有的Unix like系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在,但是目前我们使用比较多的是 vim 编辑器. vim具有程序编辑的能力,可以主动地以字体颜色辨别语法的 ...
随机推荐
- 1.创建和销毁对象_EJ
在这里记录<Effective Java>学习笔记.该书介绍了java编程中70多种极具实用价值的经验规则,揭示了该做什么,不该做什么才能产生清晰.健壮和高效的代码. 第1条: 考虑用静态 ...
- JavaScript面试技巧之数组的一些不low操作
本文主要从应用来讲数组api的一些骚操作; 如一行代码扁平化n维数组.数组去重.求数组最大值.数组求和.js排序.对象和数组的转化等: 上面这些应用场景你可以用一行代码实现? 1.扁平化n维数组 1. ...
- windows for windows:下载、安装
关于docker的下载:同学们不要再网上找来找去了,直接去到阿里云下载客户端,配置阿里的国内镜像地址就好~ 申请一个阿里云的账号,然后: tips:如果使用虚拟机的os 是windows 那么很抱歉, ...
- 洛谷P4841 城市规划(生成函数 多项式求逆)
题意 链接 Sol Orz yyb 一开始想的是直接设\(f_i\)表示\(i\)个点的无向联通图个数,枚举最后一个联通块转移,发现有一种情况转移不到... 正解是先设\(g(n)\)表示\(n\)个 ...
- Ubuntu、deepin 支持 yum
1,首先检测是否安装了build-essential程序包 sudo apt-get install build-essential 2,安装 yum sudo apt-get yum 3,检测是否安 ...
- Android项目实战(四十一):游戏和视频类型应用 状态栏沉浸式效果
需求: 手机app ,当打游戏或者全屏看视频的时候会发现这时候手机顶部的状态栏是不显示的,当我们从手机顶端向下进行滑动或手机底端向上滑动的时候,状态栏会显示出来,如果短暂的几秒时间没有操作的话,状态 ...
- Java的优先级任务队列的实践
队列的基本理解 在说队列之前说两个名词:Task是任务,TaskExecutor是任务执行器 而我们今天要说的队列就完全符合某机构这个情况,队列在有Task进来的时候TaskExecutor就立刻开始 ...
- [Android][Framework] 添加系统服务
新博客地址 http://wossoneri.github.io/2018/09/15/[Android][Framework]create-system-service/ 做系统开发,有时候需要自己 ...
- SQL Server -- 回忆笔记(一):初见数据库
SQL Server知识点回忆篇(一):初见数据库 1. 主键 primary key 唯一标识, 不会重复的值才会用来当做主键使用. 表可以没有主键,但建议每张表都有主键. 2. 数据冗余 ...
- python第一百一十一天 --Django 6 model 的相关操作
创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db ...