vi/vim
文本编辑器
vi是linux系统中一款著名的编辑软件
Vim基于vi发展而来,功能更强大
是基于命令交互的方式
启动vi/vim
vi 文件名
vim 文件名
例:vi 1.txt
通过打开多个
vi -oN 2.txt 3.txt //竖向两个窗口编辑
vi -ON 2.txt 3.txt //水平两个窗口编辑
常用的三种模式
命令模式
默认的模式"
控制屏幕光标的移动、字符、字或者行的删除,移动,复制某区:
编辑(插入)模式:
点击i键,进入编辑模式
用于文本的编辑,在此模式下,用户可以进行输入、查找等基本的文本操作
行底(末行)模式:
命令或编辑模式下,按esc键,模式切换
然后输入:(冒号),进入行底模式
将文本保存或退出编辑器,也可以设置编辑环境,如查找字符串,列出行号等。
案例:
:wq #写入文件并退出,w(write),q(quit)
插入模式切换为命令行模式
只需按"ESC"键即可
命令行模式切换到插入模式
一般用"i"键即可
命令行模式切换末行模式
只需按":"键即可
环境变量
#代表系统默认的搜索目录
echo $PATH
#代表工作目录
echo $PWD
#当前用户的家目录
echo $HOME
echo $VIM
编辑文件
sudo vi vimrc
行底模式
:wq //保存退出 w(write),q(quit)
:wq!//强制保存退出
:q //退出vi
:q! // 强制退出vi
命令行模式(快捷键)
h 左
j 下
k 上
l 右
0 行首
^ 行首
$ 行尾
gg 回到文件首行
G 回到文件末尾行
H 回到文件首行
M 回到文件中间(假设3行,回到第2行首)
L 回到文件末尾行
I 进入插入模式,并且跳到当前行首
i 进入插入模式,在当前位置直接插入
A 进入插入模式,并且跳到当前行尾
a 进入插入模式,并且跳到下一个字符
O 进入插入模式,并且在当前行上面新建一行,跳到行首开始编辑
o 进入插入模式,并且在当前行下面新建一行,跳到行首开始编辑
:n 跳转到第n行
:10 跳转到第10行
:-10 从当前向上跳10行
x 删除光标处的字符
nx 删除光标处及以后的n个字符
u 撤销
ctrl+r 反撤销
dd 删除光标所在行
dG 删除光标所在行到末尾的所有内容
d1G 删除光标所在到第一行的所有数据
D 删除光标处到行尾的内容
nl:光标位置向后移动n个位置
3l:向后移动3个字符
nh:光标位置向后移动n个位置
3l:向前移动3个字符
删除多行(行底模式)
10,16d 删除从10行到16行的所有内容
复制
yw:将光标所在之处到字尾的字符复制到缓冲区中
nyw:复制n个字符到缓冲区中
yy:复制光标所在行到缓冲区中
nyy:复制从光标所在行开始的n个字符
p:将缓冲区内的字符写到光标所在的位置
实际使用:
直接通过鼠标拖动来选中要复制的内容,然后按"y"键
进行复制,之后,按"ESC"键进入命令行模式,按"p"键
进行粘贴
剪切
- 常用剪切命令:
dd 剪切游标所在行整行
d^ 剪切至行首,或d0
d$ 剪切至行尾
dw 剪切一个word
dG 剪切至文件尾 - 选中文本进行剪切:
要选中内容进行复制,先在命令模式下按 v 进入 Visual Mode,然后用
方向键 或 hjkl 选择文本,再按 d 进行剪切。
末行(行底)模式(快捷键)
:set nu 设置行号(nu=number)
:set nonu 取消行号
#实际编程使用(重要)
运行shell命令
!cmd:运行shell命令cmd
案例:
常用于编辑源代码时,查看帮助,
执行命令去查看网络状态等等
!ls -l
!man socket
:noh 取消查找后的高亮显示
#查找
/word 从上而下在文件中查找字符串”word”
?word 从下而上在文件中查找字符串”word”
#替换
?/old/new 将当前行中查找到的第一个字符串”old”替换为”new”
?/old/new/g 将当前行中查找到的所有字符串”old”替换为”new”
#常用
:#,#s/old/new/g 在行号”#,#”范围内替换所有的字符串”old”为”new”
:%s/old/new/g 在整个文件范围内替换所有的字符创”old”为”new”
:%s/int/double/g
注释和反注释(了解)
注释:
方法1:
将光标定位到开始设置注释的行
ctrl+v,进入VB
向下移动光标,选择要注释的行
按下大写I,进入插入模式,此时按下//
按两次ESC,完成注释
反注释:
方法1:
将光标定位到开始撤销注释的行
ctrl+v,进入VB
向下移动光标,选择要撤销注释的行
按下d
完成撤销注释
分屏
:new,新建文件并分屏, 快捷键,Ctrl+W,然后马上按n键
:split 水平分屏,将当前屏分为两个,水平的。 Ctrl + w, s
:vsplit 垂直分屏,将当前屏分为两个,垂直的。 Ctrl + w, v
:only 取消分屏,取消当前的屏,当前屏指的是光标所在屏。
:vsp test1.c
(1)在shell里打开几个文件并且分屏:
vim -On file1 file2 …
vim -on file1 file2 …
大O表示垂直分割(vertical),小o表示水平分割(默认horizontal),后面的n表示分几个屏,实际上我觉得不用写,默认按后面要分割的文件数来决定分几个屏。
Shell(用户和系统内核交互的接口工具)
shell编程,就是linux命令和linux命令的组合
shell脚本,是解释执行(不需要编译),不需要像C、C++一样执行前要编译
案例:(重要)
test1.sh
#中括号内侧必须有空格
while [ True ]
do
echo “shenlan welcome to you!”
sleep 2
done
#设置权限
chmod u+x test1.sh
#执行
./test1.sh
#查看本机支持的shell
cat /etc/shells
默认是bash shell
echo 显示一行文本
echo -e “shenlan\n”
-e:代表转义
echo $SHELL #当前使用的shell
echo $PATH #命令搜索路径。一个由冒号分隔的目录列表,shell用它来搜索命令,一个普通值为 /usr/gnu/bin:/usr/local/bin:/usr/ucb:/usr/bin
echo $HOME #家目录
echo $PPID #父进程ID
例如:2487
ps -ef | grep 2487
echo $PWD #当前工作目录
date
date “+%Y%m%d %H:%M:%S”
date “+%y%m%d”
date -d “-1 day” “+%Y%m%d” //当前日期的前一天
date -d “+1 day” “+%Y%m%d” //当前日期的后一天
date -d “-1 month” “+%Y%m%d” //当前日期的前一月
date -d “+1 year” “+%Y%m%d” //当前日期的后一年
date +%W
反引号``,中的内容当做命令处理
echo “date +%F
” #输出当前的日期
计算两个和
a=1
b=2
sum=
[
[
[a+$b]
echo “sum is $sum”
expr 计算表达式的值
expr 1 + 2 #注意运算符两侧的空格
注意通配符,需要转义
expr 1 * 2
expr 1 “*” 2
echo “scale=2;5/2”|bc #输出2.50
变量(shell中默认把变量值当作字符串)
a=10 #等号两侧不能有空格
使用变量
$a
${a}
建议使用${a},原因:
$abc
和
${a}bc
不一样
read
read -p “please input a number:” x
操作字符串
例:
#注意字符串下标从零开始,截取时是闭合
name=“xiaoguo”
echo $name
echo ${name}
echo ${#name} #获取字符串长度
name=“xiao kong”
echo ${name:4} #注意空格问题,如果开始截取的位置是空格,则丢弃
echo ${name:4:4} #从索引位置4开始截取4个字符
name=“shenlan”
url=“http://www.shenlancode.com”
echo KaTeX parse error: Expected '}', got '#' at position 5: {url#̲*{name}} #删除url中的string(实际的值)左侧的内容
echo ${url#*/}