Vim与bash篇

本文介绍了Vim编辑器的使用,包括不同模式切换、移动操作、查询与替换、删除复制粘贴等内容,并概述了Bash的基础知识,如变量管理、shell脚本编程和数据流重定向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Vim的使用

首先vim有3种模式:一般指令模式(查看),插入模式(按下i , I , o , O , a , A , r , R 等进入,按esc退出),命令行模式(按下: /等主要是完成读取,拷贝,存盘等,例如:wq是保存并退出)。

 转换关系为:

2.vim在一般指令模式下的常用命令符:

移动操作

G:移动到这个文件的最后一列(常用)

nG: n 为数字。移动到这个文件的第 n 列。例如 20G 则会移动到这个文件的第 20 列(可配合

:set nu)注:set nu是

gg: 移动到这个文件的第一列, 相当于1G (常用)
n<Enter>: n 为数字。光标向下移动 n 列(常用)

查询操作

/word: 向光标之下寻找一个名称为 word 的字串。例 如要在文件内搜寻 vbird 这个字串,就输入 /vbird 即可! (常用) 
?word: 向光标之上寻找一个字串名称为 word 的字 串。
n: 这个 n 是英文按键。代表 “<u> 重复前一个搜 寻的动作 </u>” 。举例来说, 如果刚刚我们执 /vbird 去向下搜寻 vbird 这个字串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 字串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字串!
N : 这个 N 是英文按键。与 n 刚好相反,为 进行前一个搜寻动作。 例如 /vbird 后,按 N 则表示 向上 搜寻 vbird

查询与替换

:n1,n2s/word1/word2/g: n1 n2 为数字。在第 n1 n2 列之间寻找 word1 这个字串,并将该字串取代为 word2 !举例来说,在 100 200 列之间搜寻 vbird 并取代为 VBIRD 。 则: “:100,200s/vbird/VBIRD/g” 。(常用)
:1,$s/word1/word2/g :从第一列到最后一列寻找 word1 字串,并将 该字串取代为 word2 !(常用)
:1,$s/word1/word2/gc :从第一列到最后一列寻找 word1 字串,并将 该字串取代为 word2 !且在取代前显示提示 字符给使用者确认 ( confirm ) 是否需要取 代!(常用)

删除、复制与粘贴

x, X:在一列字当中, x 为向后删除一个字符 (相 当于 [del] 按键), X为向前删除一个字符 (相当于 [backspace] 亦即是倒退键)(常 用)
nx:n 为数字,连续向后删除 n 个字符 。举例来 说,我要连续删除 10 个字符, “10x”
dd :删除光标所在的那一整列(常用)
ndd:n 为数字。删除光标所在的向下 n 列,例如20dd则是删除 20 列 (常用)
d1G:删除光标所在到第一列的所有数据
dG:删除光标所在到最后一列的所有数据
d$:删除光标所在处,到该列的最后一个字符
d0:那个是数字的 0 ,删除光标所在处,到该列 的最前面一个字符
yy:复制光标所在的那一列(常用)
nyy:n 为数字。复制光标所在的向下 n 列,例如20yy则是复制 20 列(常用)
y1G :复制光标所在列到第一列的所有数据
yG:复制光标所在列到最后一列的所有数据
y0:复制光标所在的那个字符到该列行首的所有数据
y$:复制光标所在的那个字符到该列行尾的所有数据
p, P: p 为将已复制的数据在光标下一列贴上, P 为贴在光标上一列! 举例来说,我目前光标
在第 20 列,且已经复制了 10 列数据。则按下 p 后, 10 列数据会贴在原本的 20 列之 后,亦即由 21 列开始贴。但如果是按下 P 呢? 那么原本的第 20 列会被推到变成 30 列。 (常用)
J:将光标所在列与下一列的数据结合成同一列
c:重复删除多个数据,例如向下删除 10 列, [ 10cj ]
u :复原前一个动作。(常用)
[Ctrl]+r :重做上一个动作。(常用)

进入插入模式

i: i 为“从目前光标所在处插入” 。(常用)
a, A: a为“从目前光标所在的下一个字符处开始插入” A 为“从光标所在列的最后一个字符处开始插入” (常用)
o, O:这是英文字母 o 的大小写。 o为“在目前光标所在的下一列处插入新的一列” O 为在目前光标所在处的上一列插入新的一列! (常 用)

进入取代模式

r, R : r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字 ,直到按下 ESC
止;(常用)

存储命令

:w  将编辑的数据写入硬盘文件中(常用)
:w!  若文件属性为 只读 时,强制写入该文件。不过,到底能 不能写入, 还是跟你对该文件的文件权限有关啊!
:q  离开 vi (常用)
:q!  若曾修改过文件,又不想储存,使用 ! 为强制离开不储存 盘案。
:wq  储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ: 这是大写的 Z 喔!若文件没有更动,则不储存离开,若 文件已经被更动过,则储存后离开!
:w [filename]  将编辑的数据储存成另一个文件(类似另存新文件)
:r [filename]  在编辑的数据中,读入另一个文件的数据。亦即将“filename” 这个文件内容加到光标所在列后面
:n1,n2 w [filename]  将 n1 n2 的内容储存成 filename 这个文件。
:! command  暂时离开 vi 到命令行界面下执行 command 的显示结 果!例如 “:! ls /home” 即可在 vi 当中察看 /home 下面以 ls 输出的文件信息!

vim 环境的变更

:set nu  显示行号 ,设置之后,会在每一列的字首显示该列的行
:set nonu  与 set nu 相反,为取消行号!

多窗口功能

:sp [filename]     打开一个新窗口,如果有加 filename 表示在新窗口打开一个新文件,否 则表示两个窗口为同一个文件内容(同步显示)。
移动至上/下一个窗口:
[ctrl]+w+ j  [ctrl]+w+↓     按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按
j (或向下方向键),则光标可移动到下方的窗口。
[ctrl]+w+ k   [ctrl]+w+↑    同上,不过光标移动到上面的窗口。
[ctrl]+w+ q    其实就是 :q 结束离开啦! 举例来说,如果我想要结束下方的窗口,那么利 [ctrl]+w+↓ 移动到下方窗口后,按下 :q 即可离开, 也可以按下 [ctrl]+w+q 啊!
关于vim,目前记录了常用的指令,便于查询。

2.bash-shell基础

命令小tips总结:

查看系统支持的shell版本-> /etc/shells,CentOS 7.x默认的shell是/bin/bash

使用type指令可以查询命令是否为bash的内置命令,格式:type [-tpa] name

 反斜线(\)的作用,1.跳脱Enter键,实现多行输入。2.还可以取消特殊字符。

使用env查看系统环境变量。环境变量在整个环境内有效,自定变量只在shell脚本内有效。export的使用。

提示符格式设置:查看环境变量PS1

$ :(关于本 shell PID )(例:echo $$
? :(关于上个执行指令的回传值) (例:echo $?,查询上个指令的回传值)
命令设置别名:alias lm=ls -a,删除别名:unalias
history命令:格式:history []
!number,!command,!!

 万用字符:*

shell的变量使用

变量取用:echo 。格式:echo ${ variable },注意:习惯使用{}来调用变量

变量的赋值(修改)。variable="xxx",注意:变量的设计规则。

    变量与变量内容以一个等号“=”来链接,如下所示:“myname=VBird”。

    等号两边不能直接接空白字符 ,如下所示为错误: “myname = VBird” “myname=VBird
Tsai”。
    变量名称 只能是英文字母与数字,但是开头字符不能是数字 ,如下为错误: “2myname=VBird”。
    变量内容若有空白字符可使用双引号 “"” 或单引号 “'” 将变量内容结合起来,但 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示: “var="lang is $LANG"” “echo $var” 可得 “lang is zh_TW.UTF-8”。
    单引号内的特殊字符则仅为一般字符 (纯文本),如下所示: “var='lang is $LANG'” “echo $var” 可得 “lang is $LANG”。
    可用 跳脱字符“ \ ” 将特殊符号(如 [Enter], $, \, 空白字符 , ' 等)变成一般字符,如:
“myname=VBird\ Tsai”。
在一串指令的执行中,还需要借由其他额外的指令所提供的信息时,可以使用反单引
指令 “$(指令)” echo $(uname -r)
若该变量为扩增变量内容时,则 可用 "$变量名称" 或 ${变量} 累加内容 ,如下所示:
“PATH="$PATH":/home/bin” PATH=${PATH}:/home/bin” (PATH中新增了 :/home/bin
若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:“export PATH” 。(或者使用 declare -i
取消变量的方法为使用 unset :“unset 变量名称 例如取消 myname 的设置: “unset myname”。

注意:未写入bash中的变量在关机后就自动失效了。

read字段:读取用户在命令行的输入。格式:read [-pt] variable

由于shell中变量默认类型为子串,如果要声明array,int等类型,用declare字段:declare [-aixr] variable。array的使用,例:var[1]="a";var[2]="b";echo ${var[1]}, ${var[2]}

 变量内容如何添加?删除?取代?(这个待补充)

3.数据流重导向。可以将命令执行结果写入文件中。

1. 标准输入(stdin ):代码为 0 ,使用 < <<;将命令行输入的内容记录到变量中
2. 标准输出( stdout ):代码为 1 ,使用 > >>
3. 标准错误输出(stderr ):代码为 2 ,使用 2> 2>>

1>:以覆盖的方法正确的数据输出到指定的文件或设备上;1>>:以累加的方法正确的数据输出到指定的文件或设备上;

;(命令断句),&&(与),||(异或)。

cmd1&&cmd2  :1. cmd1 执行完毕且正确执行( $?=0 ),则开始执行 cmd2 2. cmd1 执行完毕且为错误( $?≠0 ),则 cmd2 不执行。
cmd1||cmd2 :1. cmd1 执行完毕且正确执行( $?=0 ),则 cmd2 不执行。 2. cmd1 行完毕且为错误( $?≠0 ),则开始执行 cmd2
使用 | 符做管线命令。
cut,grep(撷取命令)(常用)

shell脚本编程

脚本格式:1.脚本以 #!/bin/bash 开头。2.脚本需要有可执行权限。执行方式:以sh shellname。以绝对路径执行(要有x权限)

变量使用:这块如上节,声明静态变量:readonly 变量,注意:不能unset

如何设置环境变量?

给脚本传参数的办法 - 位置变量参数

//格式:${0}=filename,${1},${2},${3} ...

$n (功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10})
$* (功能描述: 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述: 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$# (功能描述: 这个变量代表命令行中所有的参数的个数)

运算符与基本语法。

判断语句

[ condition ] (注意condition前后要有空格)
#非空时返回true,可使用$?验证 (0为true,>1为false)

if语句([条件判断式],中括号和条件判断式之间必须有空格)

if [条件判断式]
then
代码
fi

if [条件判断式]
then
代码
elif [条件判断式]
then
代码
fi

case语句

case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
case $变量名 in
"值2")
如果变量的值等于值2,则执行程序2
;;
...省略其它分支...
*)
如果变量的值不是以上的值,则执行此程序
;;
esac

for语句,如何生成连续值:[1..100],[a..g]

for 变量 in 值1 值2 值3...
do
程序
done

while[条件判断式]
do
查询
done

//until与while相反
until[条件判断式]
do
查询
done

自定义函数格式

[function] funname[()]
{
	Action;
	[return int;]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值