2 tmux和vim
2.1 tmux
tmux优势
- 不需要本地编译器,只需要终端编译器
- 不用担心断网,自动恢复现场
- 分屏
结构:tmux允许有多个session,一个session允许有多个window,一个window允许有多个pane
修饰键:ctrl a
通常修饰键的使用规则是,按下并释放后,再按其它键,而不是同时按下。
键盘操作
操作 | 快捷键 | 说明 |
---|---|---|
新建session | tmux |
在终端中输入,不能在tmux中嵌套 |
左右分屏 | 修饰键 % |
把当前pane拆分成左右两部分 |
上下分屏 | 修饰键 " |
把当前pane拆分成上下两部分 |
关闭当前pane | ctrl d |
如果没有pane,则关闭window;如果没有window,则关闭session |
选择相邻pane | 修饰键 方向键 |
选择界面汇中相邻的pane |
调整分割线 | 修饰键 方向键 (同时按下) |
调整pane分割线位置 |
全屏 | 修饰键 z |
将当前pane全屏/取消全屏 |
挂起session | 修饰键 d |
将当前session移至后台 |
恢复session | tmux a |
打开挂起的session |
选择session | 修饰键 s |
在此模式下,上下方向键选择session,左右方向键展开和闭合当前项 |
新建window | 修饰键 c |
在当前session新建window |
选择window | 修饰键 w |
与选择session的界面一样,只是所有session只展开到window层次 |
翻页 | 修饰键 PageUp 或PageDown |
当前pane向上/向下翻页 |
复制 | 修饰键 [ |
需提前选中文字 |
粘贴 | 修饰键 ] |
粘贴到当前光标处 |
鼠标操作
- 鼠标可选中要使用的pane
- 鼠标可移动pane分割线
- 鼠标滚轮可翻阅当前pane
- 需要按住
shift
才能选中文本
关闭window
- 在非
tmux
终端输入tmux ls
查看当前开启的window及其id
- 用命令
tmux kill-window -t id
关闭编号为id
的窗口
2.2 vim
不使用鼠标的编辑器
三种模式
- 一般命令模式:按不同键执行不同的功能
- 编辑模式:类似文本编辑器
- 命令行模式:按
:/?
任意一个即可进入,用于实现查找、替换、保存、退出
一般命令模式的操作
操作 | 快捷键 | 备注 |
---|---|---|
进入编辑模式 | i |
|
退出当前模式 | <ESC> |
|
移动光标 | h j k l |
左下上右 |
光标右移n个字符 | n<space> |
|
光标下移n行 | n<enter> |
|
跳到行首 | 0 或^ |
0 跳转到当前行的第一个非空字符;^ 跳转到当前行的第一个字符 |
跳到行尾 | $ |
跳转到当前行的最后一个字符 |
跳到最后一行 | G |
|
跳到第n 行 |
:n 或nG |
|
跳到第一行 | gg |
等价于1G |
向下查找word | /word |
|
向上查找word | ?word |
|
重复执行上一个查找操作 | n |
|
反向重复执行上一个查找操作 | N |
|
指定行范围替换 | :n1,n2s/word1/word2/g |
在$n_1$行和$n_2$行之间查找字符串word1,并全部替换成word2 |
无确认全文替换 | :1,$s/word1/word2/g |
把全文中的word1全部替换很word2,无需确认 |
有确认全文替换 | :1,$s/word1/word2/gc |
把全文中的word1全部替换很word2,需确认 |
进入字符选择模式 | v |
|
删除当前字符 | d |
|
删除当前行 | dd |
|
复制 | y |
|
复制当前行 | yy |
|
粘贴 | p |
|
撤销 | u |
|
重做 | ctrl r |
取消撤销 |
文本缩进 | < > |
分别对应左右缩进,需要提前选中文本 |
保存 | :w |
|
强制保存 | :w! |
|
退出 | :q |
|
强制退出 | :q! |
|
保存并退出 | :wq |
|
无缩进粘贴模式 | :set paste |
|
有缩进粘贴模式 | :set nopaste |
|
显示行号 | nu |
|
隐藏行号 | nonu |
|
全文代码格式化 | gg=G |
|
关闭查找高亮 | :noh |
|
中断当前命令 | ctrl q |
当无法打开某个文件时
- 关闭打开该文件的进程
- 删除该文件对应的swp文件
2.3 作业核心代码
task1
vim names.txt
i
...
:wq
task2
vim problem.txt
G
101<space>
X
3G
8<space>
X
3G
8<space>
X
gg
30<space>
X
16G
55<space>
X
9G
80<space>
X
:wq
task3
vim problem.txt
/two
lll
i
abc
<ESC>
n
i
def
<ESC>
n
lll
d12<space>
n
dd
:wq
task4
vim problem.txt
:5,15s/of/OF/g
:1,$s/the/THE/g
:1,$s/is/IS/gc
:wq
task5
vim problem.txt
11G
dd
G
p
5G
yy
G
p
:wq
task6
vim problem.txt
11G
14<space>
v
j
j
0
5<space>
d
G
$
p
5G
87<space>
v
j
j
0
6<space>
y
G
$
p
:wq
注意n<space>
是相对当前光标位置的跳跃,因此在定位当前行的第n
个字符前,需要使用命令0
把光标移至行首
若想在末尾追加,先用$G$跳转到最后一行,然后再用$
跳到最后一个字符
task7
用vim同时打开source0.cpp
和source1.cpp
,清空source0.cpp
文件内容并保存
vim source0.txt source1.txt
gg
V
G
d
:w
用命令:n
切换到文件source1.cpp
,复制第1~3行
:n
gg
V
3G
y
用命令:N
切换回文件source0.cpp
,粘贴刚刚复制的内容
:N
i
p
:w
用命令:n
切换到文件source1.cpp
,复制第12~24行
:n
12G
V
24G
y
用命令:N
切换回文件source0.cpp
,光标移动到之后一行,粘贴刚刚复制的内容,保存并退出
:N
G
p
:wq
task8
vim source.cpp
gg=G
:wq
task9
vim source.cpp
15G
V21G
>
15G
V21G
>
22G
V23G
<
:wq
task10
shift
选中网址,按ctrl
+insert
复制网址,打开网址,把代码敲进新文件source.cpp
并保存即可
vim source.cpp
i
...
:wq