vim的基本操作

vim操作:

在磁盘上进行操作

保存退出:

ZZ 保存退出 ZQ 不保存退出

光标移动

行移动:

字符:键盘方向键(或h、l、j、k) ​ 单词: ​ w:下一个单词的词首 ​ e:当前或下一单词的词尾 ​ b:当前或前一个单词的词首

行首行尾:

^ 跳转至光标当前行行首的第一个非空白字符 ​ 0 跳转光标当前行至行首 ​ $ 跳转光标当前行至行尾

多行跳转:

1G 或 gg 跳转到第一行 ​ G 跳转到最后一行

段移动:

} 下一段 ​ { 上一段

页移动:

PageDown(或Ctrl+f):下翻一屏 ​ PageUp(或Ctrl+b):上翻一屏 ​ H:页首 ​ M:页中间行 ​ L:页底

字符编辑:
x   剪切光标处的字符
#x  剪切光标处起始的#个字符
xp  交换光标所在处的字符及其后面字符的位置
~   转换大小写
查找:
/PATTERN:从当前光标所在处向文件尾部查找
?PATTERN:从当前光标所在处向文件首部查找
            n:表示下一个(next),与命令同方向
            N:与命令反方向
删除:d (delete)
dd          删除当前光标所在行(3dd 删除光标向下3行内容)
dw          删除当前光标所在位置的单词
d$(或dD)   删除当前光标所在位置至行尾的内容
dG          删除当前光标所在行至文本末尾的内容
复制:y (yank)
y   表示复制,可以在y后面使用和d命令相同,p 表示粘贴
yy          复制光标所在行,粘贴时在光标下一行;支持5yy
y$          复制光标到行尾的内容,y$粘贴时在光标所在位置;支持5y$
yG          复制当前光标所在行至文本末尾的内容
粘贴:p
p   缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
P   缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
撤销:u

将缓冲区的数据保存到文件中并退出vim:

q:如果未修改缓冲区数据,退出
q!:取消所有对缓冲区数据的修改并退出
w filename:将文件保存到另一个文件中
wq:将缓冲区数据保存到文件中并退出
x 写入并退出
​
r filename 读文件内容到当前文件中
w filename 将当前文件内容写入另一个文件
​
!command 执行命令
r!command 读入命令的输出
光标位置:跳转光标
格式::start_pos,end_pos CMD
#       #具体第#行,例如2表示第2行
#,#     #从左侧#表示起始行,到右侧#表示结尾行
.       #当前行
$       #最后一行
.,$-1   #当前行到倒数第二行
%       #全文, 相当于1,$
​
/pattern/       #从当前行向下查找,直到匹配pattern的第一行,即:正则表达式
光标地址选定后 + CMD: 配合上面的光标位置
d       #删除
y       #复制
w file  #将范围内的行另存至指定文件中
r file  #在指定位置插入指定文件中的所有内容
替换:
格式:s/要查找的内容/替换为的内容/修饰符
vim编辑器会跳到old第一次出现的地方,并用new来替换;可以对替换命令作一些修改来替换多处文本。
分隔符: /,#,@
修饰符:
i #忽略大小写
g #全局替换,默认情况下,每一行只替换第一次出现
gc #全局替换,每次替换前询问
示例:
:s/old/new/g:一行命令替换所有old
:n,ms/old/new/g:替换行号n和m之间所有old
:%s/old/new/g:替换整个文件中的所有old
:%s/old/new/gc:替换整个文件中的所有old

可视化模式

主要作用:可视化复制、删除和粘贴 进入可视化模式,在普通模式下按下 可视化按键 即可 允许选择的类型: v 面向字符,-- VISUAL -- V 面向整行,-- VISUAL LINE -- ctrl + v 面向块,-- VISUAL BLOCK --

类型1: v 面向字符
用法:在普通模式下,输入v
群体:一个一个的字符 复制粘贴删除
行首插入:
类型2:V 面向整行
用法:在普通模式下,输入V
群体:一行一行的字符 复制粘贴删除
行首插入:
类型3:ctrl + v 面向块
用法:在普通模式下,输入ctrl + v
群体:一行一行的字符 复制粘贴删除
行首插入:
1、先将光标移动到指定的第一行的行首
2、输入ctrl+v 进入 可视化模式
3、向下移动光标,选中希望操作的每一行的第一个字符
4、输入大写字母 I 切换至插入模式
5、输入 #
6、按 ESC 键 两次
插入模式:

a 在光标后追加内容 A 在光标的行尾追加内容 o 在当前光标所在行的下方打开一个新行

i 在光标追处加内容 I 在行首插入 O 在当前光标所在行的上方打开一个新行 插入模式下 ESC 进入普通模式

多文件编辑:

vim FILE1 FILE2 FILE3 ... :next 下一个 :prev 前一个 :first 第一个 :last 最后一个 :wall 保存所有 :qall 不保存退出所有 :q!all 强制不保存退出所有 :wqall保存退出所有

多窗口编辑:

vim -o|-O FILE1 FILE2 ... -o: 水平或上下分割 -O: 垂直或左右分割(vim only) 窗口间切换:Ctrl+w 两次

:wall 保存所有
:qall 不保存退出所有
:q!all 强制不保存退出所有
:wqall保存退出所有

vi/vim环境定制:

显示行号:
显示:set number,简写 set nu
取消显示:set nonumber, 简写 set nonu
自动缩进:
启用:set autoindent,简写 set ai
禁用:set noai
复制保留格式: ----
启用:set paste
禁用:set nopaste
显示Tab ^I和换行符 和$显示:
启用:set list
禁用:set nolist
高亮搜索:
启用:set hlsearch
禁用:set nohlsearch 简写:nohl
语法高亮:
启用:syntax on
禁用:syntax off
更改文件格式:
启用windows格式:set fileformat=dos
启用unix格式:set fileformat=unix
简写 set ff=dos|unix
设置Tab
将Tab 设置成 空格
启用:set expandtab 默认为8个空格代替Tab
禁用:set noexpandtab
简写:set et
指定Tab 设置成 任意空格
启用:set tabstop=# 指定#个空格代替Tab
简写:set ts=4
调节代码格式:
普通模式:
    向右缩进 >>
    向左缩进 <<
设置缩进为4个字符
    set shiftwidth=4
设置光标所在行的标识线:
启用:set cursorline,简写 set cul
禁用:set nocursorline

个人环境定制:

vim定制个人用户环境 配置文件:

例如:echo vim $HOME/.vimrc 输入: set number set cul 保存退出;重新用vim编辑器打开文件,会自动加载$HOME/.vimrc里的配置

命令类型:
内部命令:

由shell自带的,通过某种命令形式提供,用户登录自动加载并常驻内存

type -a history
外部命令:

在路径下有对应的可执行文件,当执行命令时加载到内存中,执行完后清除:

type -a useradd

alias 别名命令

对于较长的命令,定义成较短的别名方便执行

查看当前shell命令:alais

定义别名:alias new_cmd='cmd'
删除别名:unalias new_cmd
删除所有:unalias -a
持久化别名配置:
vim /etc/profile

查看历史命令:history

history:查看用户历史命令

内部命令:存储在内存中,用户正常退出时刷写到文件里 ~/.bash_history

[19:28:25 root@localhost ~]# history

命令历史相关环境变量:已经在:/etc/profile中加入第四条
HISTSIZE:命令历史记录的条数
HISTFILE:指定历史文件,默认为~/.bash_history
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT="%F %T `whoami` " 显示时间和用户                *

执行命令 :执行 内的命令

调用命令行历史命令:
重复前一个命令:
使用上方向键,并回车执行
输入 !! 并回车执行
输入 !-1 并
​
回车执行            # !-n:执行history历史中倒数第n个命令
                             # !n   执行history命令输出对应序号n的命令
按 Ctrl + p 并回车执行         # bash快捷键,例如:Curl + c
重复指定命令字符名的命令:
!string     重复前一个以“string”开头的命令
!?string    重复前一个包含string的命令
!string:p   仅打印命令历史,而不执行

表示引号里的一串字符为一个整体:

' '# 单引号:单引号内的任意字样都会被原样输出,无法使用变量、转义等操作
" "# 双引号:双引号内可以使用变量、转译、通配符,都可以进行翻译

[20:29:03 root@localhost ~]# a=1 [20:29:05 root@localhost ~]# [20:29:05 root@localhost ~]# echo '$a' $a [20:29:12 root@localhost ~]# echo "$a" 1

执行符号内的命令:

$( ) [20:30:05 root@localhost ~]# a=echo 1 [20:30:15 root@localhost ~]# echo $a

echo 1

[20:30:46 root@localhost ~]# a=$(echo 1) [20:30:53 root@localhost ~]# echo $a

1
扩展:

$[ ] # 表示计算器,只支持整数运算;b=$[10+5] 其他计算工具: bc # 支持浮点数 expr 1 + 5 # 只支持整数 ${ } # 引用变量;截取字符串

引用变量基础上,截取字符串
获取字符串长度

格式: ${#VAR} [18:05:38 root@localhost ~]# a=123 [18:05:40 root@localhost ~]# echo ${a} 123 [18:05:45 root@localhost ~]# echo ${#a} 3 [18:05:49 root@localhost ~]# a=1234 [18:05:53 root@localhost ~]# echo ${#a} 4

字符串切片

格式: ${VAR:offset} ${VAR:offset:length} 截取从 offset 个字符开始,向后 length 个字符 [18:05:49 root@localhost ~]# a=1234 [18:08:28 root@localhost ~]# echo ${a:0:1} 1 [18:08:45 root@localhost ~]# echo ${a:0:2} 12

替换字符串

${VAR:/替换的字符/替换后的字符} ${VAR://替换的字符/替换后的字符} 一个正斜杠为只匹配第一个字符串,两个正斜杠为匹配所有字符。 [18:15:46 root@localhost ~]# a="1123 1123 1123" [18:17:37 root@localhost ~]# echo ${a/1/2} 2123 1123 1123 [18:17:39 root@localhost ~]# echo ${a/11/2} 223 1123 1123 [18:17:56 root@localhost ~]# echo ${a//11/2} 223 223 223

查找

d:通过指定路径下查找文件

工作特点:
  • 查找速度略慢

  • 精确查找

  • 查找条件丰富

find [OPTION]... [查找路径] [查找条件] [处理动作]

查找路径:指定具体目标路径;默认为当前目录 查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件 处理动作:对符合条件的文件做操作,默认输出至屏幕

查找条件:

根据文件名和inode查找

常用参数: -name "文件名称" # 支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来 ** -iname "文件名称" # 不区分字母大小写 -inum n # 按inode号查找 -samefile name # 相同inode号的文件 -links n # 链接数为n的文件

范例:

find / -name "ifcfg-eth0"
find / -name "ifcfg-eth0"
find / -name "*.txt"
find /var -name "log*"

根据文件类型查找 常用参数: -type TYPE TYPE可以是以下形式: f # 普通文件 ** d # 目录文件 ** l # 符号链接文件 s # 套接字文件 b # 块设备文件 c # 字符设备文件 p # 管道文件

范例: #查看/home的目录

find /home -type d

根据属主、属组查找

常用参数:

-user USERNAME #查找属主为指定用户(UID)的文件-group GRPNAME #查找属组为指定组(GID)的文件 -uid userID #查找属主为指定的UID号的文件 -gid GroupID #查找属组为指定的GID号的文件 -nouser #查找没有属主的文件 -nogroup #查找没有属组的文件

范例:
find / -user super
find /-group tenant

根据文件大小来查找

常用参数:

-size[+|-]#UNIT #常用单位:k,M,G,c(byte),注意大小写敏感#UNIT:#表示(#-1,#],如:6k 表示(5k,6k]

-#UNIT #表示[0,#-1],如:-6k 表示[0.5k]

+#UNIT #表示(#,∞),如:+6k 表示(6k,∞) 范例:

find / -size +10G

/proc/kcore find:'/proc/25229/task/25229/fd/6’: No such file or directory find:'/proc/25229/task/25229/fdinfo/6’: No such file or directory find:'/proc/25229/fd/5’:No such file or directoryfind::'/proc/25229/fdinfo/5’:No such file or directory

[rootacentos8 ~l#ll -h /proc/kcore

-r-------- 1 root root 128T Dec 14 2020 /proc/kcore

[rootacentos8 ~l#du -sh /proc/kcore

0 /proc/kcore

文件权限:-perm 数字

find ./ -perm 600

find ./ -perm 600 -ls

指定搜索目录层级:

-maxdepth level #最大搜索目录,指定目录下为第一级

-mindepth level # 最小搜索目录

例: find /etc -mindepth 2 -maxdepth 2

排除目录:

-path 指定路径查找
-prune 若符合条件的是一个目录,则不进入目录查找
例:

#查找/etc/下,除/etc/security目录的其它所有.conf后缀的文件

find /etc -path'/etc/security'-a -prune -o -name "*.conf'

#查找/etc/下,除/etc/security和/etc/systemd,/etc/dbus-1三个目录的所有.conf后缀的文件

find /etc ( -path "/etc/security" -o -path" /etc/systemd" -o -path "/etc/dbus-1" )-a -prune -o -name "*.conf"

#排除/proc和/sys日录

find / ( -path /sys -o -path /proc ) -prune -o -type f -mmin -1 -print

空文件或目录

常用参数 -empty

find / -type d -empty

练习:构建find练习文件环境,使用find命令查找条件

mkdir {1..50}
touch {1..50}/{1..100}.log
mkdir {1..50} 是在当前目录下创建一系列从1到50的目录,每个数字代表一个子目录。
touch {1..50}/{1..100}.log` 这一行用于在每个刚刚创建的子目录下生成100个名为.log的空文本文件
find ./ -name "*.log"查找所有log文件

限制多少目录下的文件:

find ./number -name "*.log"

find ./10 -name "*.log"

最大深度下搜索

find ./ -amxdepth 1 |ls -l

逻辑组合条件:

与: -a
或:-o
非:-not

示例:

find /etc/ -type f -o -type l |wc -l

find ! -user root ! -user super -ls

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值