[Acwing] Linux基础课(二)
Vim
使用
Linux常用基础
tmux
和vim
使用
tmux
和vim
对于Linux
用户来说可真的是太方便了,可谓是左膀右臂啊!
1.tmux
教程
1.功能:
- (1) 分屏
- (2) 允许断开
Terminal
连接后,继续进行进程。
2.结构:
-
一个
tmux
可以包含多个session
,一个session
可以包含多个window
,一个window
可以包含多个pane
。tmux: session 0: window 0: pane 0 pane 1 pane 2 ... window 1 window 2 ... session 1 session 2 ...
3.操作:
- (1)
tmux
:新建一个session
,其中包含一个window
,window
中包含一个pane
,pane
里打开了一个shell
对话框。 - (2) 按下
Ctrl + a
后手指松开,然后按%
: 将当前pane
左右平分成两个pane
。 - (3)按下
Ctrl + a
后手指松开,然后按“ ”
[注意是双引号]: 将当前pane
上下平分成两个pane
。 - (4)
Ctrl + d
:关闭当前pane
; 如果当前window
的所有pane
均已关闭,则自动关闭window
;如果当前session
的所有window
均已关闭,则自动关闭session
。 - (5)鼠标点击可以选
pane
。 - (6)按下
Ctrl + a
后手指松开,然后按方向键:选择相邻的pane
。 - (7)鼠标拖动
pane
之间的分割线,可以调整分割线的位置。 - (8)按下
Ctrl + a
的同时按方向键,可以调整pane
之间分割线的位置。 - (9)按下
Ctrl + a
后手指松开,然后按z
:将当前pane
全屏/取消全屏。 - (10)按下
Ctrl + a
后手指松开,然后按d
:挂起当前session
。 - (11)
tmux a
: 打开之前挂起的session
。 - (12)按下
Ctrl + a
后手指松开,然后按s
:选择其它session
。- 方向上键:选择上一项
session/window/pane
- 方向下键:选择下一项
session/window/pane
- 方向右键:展开当前项
session/window
- 方向左键:闭合当前项
session/window
- 方向上键:选择上一项
- (13)按下
Ctrl + a
后手指松开,然后按c
:在当前session
中创建一个新的window
。 - (14)按下
Ctrl + a
后手指松开,然后w
:选择其他window
,操作方法与(12)
完全相同。 - (15)按下
Ctrl + a
后手指松开,然后PageUp
:翻阅当前pane
内的内容。 - (16)鼠标滚轮:翻阅当前
pane
内的内容。 - (17)在
tmux
中选中文本时,需要按住shift
键。(仅支持windows
和Linux
,不支持Mac
,不过操作并不必须的,影响不大) - (18)
tmux
中复制/粘贴文本的通用方式:- 按下
Ctrl + a
后松开手指,然后按[
- 用鼠标选中文本,被选中的文本会被自动复制到
tmux
的剪切板 - 按下
Ctrl + a
后松开手指,然后按]
,会将剪切板中的内容粘贴到光标处
- 按下
2.vim
教程
1.功能:
- (1) 命令行模式下的文本编辑器
- (2) 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。
- (3)使用方式:
vim filename
- 如果已有该文件,则打开它
- 如果没有该文件,则打开一个新的文件,并命名为
filename
2.模式:
- (1)一般命令模式
- 默认模式。命令输入方式:根据输入的不同指令进行不同的操作。
- (2)编辑模式
- 在一般命令模式里按下
i
,会进入编辑模式。 - 按下
ESC
会退出编辑模式,返回到一般命令模式
- 在一般命令模式里按下
- (3)命令行模式
- 在一般命令模式里按下
: / ?
三个字母中的任意一个,会进入命令行模式。可以进行查找、替换、保存、退出、配置编辑器等。
- 在一般命令模式里按下
3.操作:
- (1)
i
:进入编辑模式 - (2)
ESC
:进入一般命令模式 - (3)
h
或左箭头:光标向左移动一个字符 - (4)
j
或向下箭头:光标向下移动一个字符 - (5)
k
或向上箭头:光标向上移动一个字符 - (6)
l
或向右箭头:光标向右移动一个字符。 - (7)
n<Space>
:n
表示数字,按下数字后再按空格,光标会向右移动这一行的n
个字符 - (8)
0
或功能键[Home]
:光标移动到本行开头 - (9)
$
或功能键[End]
:光标移动到本行末尾 - (10)
G
:光标移动到最后一行 - (11)
:n
或nG
:n
为数字,光标移动到第n
行 - (12)
gg
:光标移动到第一行,相当于1G
- (13)
n<Enter>
:n
为数字,光标向下移动n
行 - (14)
/word
: 向光标之下寻找第一个值为word
的字符串 - (15)
?word
: 向光标之上寻找第一个值为word
的字符串 - (16)
n
: 重复前一个查找操作 - (17)
N
: 反向重复前一个查找操作 - (18)
:n1,n2s/word1/word2/g
:n1
与n2
为数字,在第n1
与n2
行之间寻找word1
这个字符串,并将该字符串替换为word2
- (19)
:1, $s/word1/word2/g
:将全文的word1
替换为word2
- (20)
:1, $s/word1/word2/gc
:将全文的word1
替换为word2
,且在替换前要求用户确认 - (21)
v
:选中文本 - (22)
d
: 删除选中的文本 - (23)
dd
:删除当前行 - (24)
y
:复制选中的文本 - (25)
yy
: 复制当前行 - (26)
p
:将复制的数据在光标的下一行/下一个位置粘贴 - (27)
u
:撤销 - (28)
Ctrl + r
:取消撤销 - (29) 大于号
>
:将选中的文本整体向右缩进一次 - (30)小于号
<
:将选中的文本整体向左缩进一次 - (31)
:w
保存 - (32)
:w!
强制保存 - (33)
:q
退出 - (34)
:q!
强制退出 - (35)
:wq
保存并退出 - (36)
:set paste
设置成粘贴模式,取消代码自动缩进 - (37)
:set nopaste
取消粘贴模式,开启代码自动缩进 - (38)
:set nu
显示行号 - (39)
:set nonu
隐藏行号 - (40)
:gg=G
将全文代码格式化 - (41)
:noh
关闭查找关键词高亮 - (42)
Ctrl + q
: 当vim
卡死时,可以取消当前正在执行的命令
练习
question
创建好作业后,先进入文件夹/home/acs/homework/lesson_2/,然后:
(0) 进入homework_0文件夹,创建文件names.txt,并顺次将下列姓名写入该文件,每个名字占一行。
AcWing、yxc、Bob、张强、李明、Alice
(1) 进入homework_1文件夹,打开problem.txt,并依次删除下列字符:
[1] 最后一行第101个字符
[2] 第3行第8个字符
[3] 第1行第30个字符
[4] 第16行第55个字符
[5] 第9行第80个字符
最后保存文件并退出。
(2) 进入homework_2文件夹,打开problem.txt,并依次执行如下操作:
[1] 在第1个"two"的后面添加"abc"
[2] 在第2个"two"的前面添加"def"
[3] 将第3个"two"后面的连续12个字符删掉
[4] 将第4个"two"所在的行删掉
最后保存文件并退出。
(3) 进入homework_3文件夹,打开problem.txt,并依次执行如下操作:
[1] 将第5行至第15行中所有of替换成OF。
[2] 将全文中所有的the替换成THE。
[3] 将第偶数个is替换成IS,第奇数个is不变。下标从1开始。
(4) 进入homework_4文件夹,打开problem.txt,并依次执行如下操作:
[1] 删除第11行
[2] 将所删除的行粘贴到文件最后一行的下一行
[3] 复制第5行
[4] 将所复制的行粘贴到文件当前最后一行的下一行
(5) 进入homework_5文件夹,打开problem.txt,并依次执行如下操作:
[1] 删除第11行第15个字符(包含该字符)至第13行第5个字符(包含该字符)
[2] 将所删除的内容粘贴到文件末尾(注意不要另起一行)
[3] 复制第5行第88个字符(包含该字符)至第7行第6个字符(包含该字符)
[4] 将所复制的内容粘贴到当前文件末尾(注意不要另起一行)
(6) 进入homework_6文件夹,并依次执行如下操作:
[1] 清空source0.cpp
[2] 将source1.cpp中的第1-3行和第12-24行复制到source0.cpp中
(7) 进入homework_7文件夹,格式化source.cpp
(8) 进入homework_8文件夹,打开source.cpp,并依次执行如下操作:
[1] 将第15-21行向右缩进2次。
[2] 将第22-23行向左缩进1次。
(9) 进入homework_9文件夹,打开链接:https://www.acwing.com/activity/content/code/content/1694465/
新建文件source.cpp,将链接中的代码抄进source.cpp文件中。
Answer
(0)
cd homework_0
touch names.txt
vim names.txt
输入xxx
按```ESC```或```ctrl + [```
:wq
(1)进入homework_1文件夹,打开problem.txt,并依次删除下列字符:
cd homework_1
vim problem.txt
[1] 最后一行第101个字符
G 100<Space> i<Delete> 按```ESC```或```ctrl + [```
[2] 第3行第8个字符
:3 8<Space>i<Delete> 按```ESC```或```ctrl + [```
[3]第1行第30个字符
gg 30<Space> i <Delete> 按```ESC```或```ctrl + [```
[4]第16行第55个字符
:16 55<Space> i <Delete> 按```ESC```或```ctrl + [```
[5] 第9行第80个字符
:9 80<Space> i <Delete> 按```ESC```或```ctrl + [```
按```ESC```或```ctrl + [```
:wq
(2) 进入homework_2文件夹,打开problem.txt,并依次执行如下操作:
cd homework_2
vim problem.txt
[1] 在第1个"two"的后面添加"abc": gg /two i 输入abc 按```ESC```或```ctrl + [```
[2] 在第2个"two"的前面添加"def": n i 输入def 按```ESC```或```ctrl + [```
[3] 将第3个"two"后面的连续12个字符删掉: nn i <Delete>按12次 按```ESC```或```ctrl + [```
[4] 将第4个"two"所在的行删掉: nn dd
:wq
(3) 进入homework_3文件夹,打开problem.txt,并依次执行如下操作:
cd homework_3
vim problem.txt
[1] 将第5行至第15行中所有of替换成OF。```:5,15s/of/OF/g```
[2] 将全文中所有的the替换成THE。```:1,$s/the/THE/g```
[3] 将第偶数个is替换成IS,第奇数个is不变。下标从1开始。 ```:1,$s/is/IS/gc```然后 ny 交替执行
(4) 进入homework_4文件夹,打开problem.txt,并依次执行如下操作:
cd homework_4
vim problem.txt
[1] 删除第11行 ```11G dd```
[2] 将所删除的行粘贴到文件最后一行的下一行 ```G p```
[3] 复制第5行 ```5G yy```
[4] 将所复制的行粘贴到文件当前最后一行的下一行 ```G p```
(5) 进入homework_5文件夹,打开problem.txt,并依次执行如下操作:
cd homework_5
vim problem.txt
[1] 删除第11行第15个字符(包含该字符)至第13行第5个字符(包含该字符)```11G14<Space> 13G 5<Space> d```
[2] 将所删除的内容粘贴到文件末尾(注意不要另起一行)```Gp```
[3] 复制第5行第88个字符(包含该字符)至第7行第6个字符(包含该字符)```5G87<Space> 7G6<Space> y```
[4] 将所复制的内容粘贴到当前文件末尾(注意不要另起一行)```Gp```
(6) 进入homework_6文件夹,并依次执行如下操作:
cd homework_6
vim source0.cpp
[1] 清空source0.cpp ```ggdG```
[2] 将source1.cpp中的第1-3行和第12-24行复制到source0.cpp中
```ctrl+a " 新建一个上下的pane
在上面的pane中打开source0.cpp
在下面的pane中打开source1.cpp
在source1.cpp的pane中,ctrl + a, z 使得pane全屏,:set nonu,去掉行号,按住shift 选中1-3行,然后ctrl + insert复制
ctrl + a, ↓,切换到source0.cpp中的pane中,set paste, shift + insert粘贴
12-24行重复上面操作```
(7) 进入homework_7文件夹,格式化source.cpp
```cd homework_7 vim source.cpp gg=G :wq```
(8) 进入homework_8文件夹,打开source.cpp,并依次执行如下操作:
[1] 将第15-21行向右缩进2次。 ```15Gv21G > 重复上面```
[2] 将第22-23行向左缩进1次。 ```22Gv23G<```
(9) 进入homework_9文件夹,打开链接:https://www.acwing.com/activity/content/code/content/1694465/
新建文件source.cpp,将链接中的代码抄进source.cpp文件中。
vim source.cpp
把代码抄进去
:wq