0
点赞
收藏
分享

微信扫一扫

Linux基础课 第二章、tmux和vim教程


文章目录

  • ​​1 tmux使用教程​​
  • ​​1.1 tmux安装​​
  • ​​1.2 tmux简介​​
  • ​​1.3 tmux结构​​
  • ​​1.4 tmux操作​​
  • ​​1.4.1 前缀键​​
  • ​​1.4.2 会话(session)操作​​
  • ​​1.4.3 窗口(window)操作​​
  • ​​1.4.4 面板(pane)操作​​

  • ​​2 vim使用教程​​
  • ​​2.1 vim简介​​
  • ​​2.2 vim模式​​
  • ​​2.2.1 正常模式(Normal-mode)​​
  • ​​2.2.2 插入模式(Insert-mode)​​
  • ​​2.2.3 命令模式(Command -mode)​​
  • ​​2.2.4 可视模式(Visual-mode)​​

  • ​​3 参考文献​​

1 tmux使用教程

1.1 tmux安装

# Ubuntu 或 Debian
$ sudo apt-get install tmux

# CentOS 或 Fedora
$ sudo yum install tmux

# Mac
$ brew install tmux

1.2 tmux简介

tmux是一个非常优秀的终端复用器(terminal multiplexer),其可以使用一系列的终端session,它使您可以在一个终端中的多个程序之间轻松切换、分离它们(它们继续在后台运行)并将它们重新附加到不同的终端。

session:我们知道,在windows命令行中我们打开一个终端窗口,然后输入命令实现与计算机的交流。而这种用户与计算机的这种临时的交互就叫做session。

tmux的主要功能有:

  • 分屏,即允许在单个窗口中访问多个会话。这对我们同时运行多个命令行程序非常有用。
  • 允许断开Terminal连接后,继续运行进程。这样,我们可以随时随地放心的进行操作,即使工作进行到一半突然断开,我们打开tmux仍可以重新进入到操作现场。
  • 会话共享(适用于结对编程或者远程教学)。我们可以将tmux的会话地址分享给其他人,这样他们就可以通过SSH接入该会话。更骚的是,如果你要给其他人演示远程服务器的操作,不必一直盯着屏幕,我们可以借助tmux,他就可以完全进入你的会话。

当然,tmux的功能还有很多,相比于其他的终端复用器,tmux更易用也更强大,这也是我们为什么要学习tmux的原因。

1.3 tmux结构

tmux是采用C/S模型构建的,我们输入tmux即相当于开启了一个服务器,此时默认将新建一个session,然后再session中新建一个window,window中新建一个pane。其联系为:一个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

Linux基础课 第二章、tmux和vim教程_方向键

1.4 tmux操作

注:以下操作大多数都会给出命令和对应的快捷键,如果用于学习,建议两种操作都要学会,但在平常操作中,使用快捷键是更方便的。

1.4.1 前缀键

tmux提供了很多的快捷键。特别的是所有的快捷键都需要通过前缀键唤起,默认的快捷键为​​ctrl + b​​。我们可以通过​​tmux list-keys​​命令来查看所有快捷键指令。

当然如果觉得​​ctrl + b​​不好用,习惯用其他的键,这里提供修改前缀键的方法如下:

# 首先打开文件~/.tmux.conf
vim ~/.tmux.conf
# 设置前缀为Ctrl + a。
set -g prefix C-a
# 解除Ctrl + b与前缀的对应关系。
unbind C-b
# 绑定ctrl + a 成为新的指令前缀。
bind C-a send-prefix
#然后让它生效。我们也可以直接重启让它生效。
source ~/.tmux.conf

1.4.2 会话(session)操作

  • 新建会话:​​tmux new -s sessionName​​。
    这样,我们就可以创建一个名为sessionName的会话了。当然我们也可以直接简写为​​tmux​​,这样会新建一个无名称的会话。但为了我们方便管理,所以建议还是指定会话名称。
  • 断开当前会话:​​tmux detach​​。
    这样,我们就可以断开当前会话,但是会话 还是会在后台运行。当然,我们还可以使用快捷键:先按​​ctrl + b​​,再按 ​​ctrl + d​​即可退出。
    注意:这个并没有真正的关闭会话。
  • 进入已存在的会话:​​tmux a -t sessionName​​或者直接输入​​tmux a​​。
    前者可以指定进入的sessionName会话,而后者是默认进入第一个会话。其中的​​a​​命令实际上就是​​attach​​,我们可以简写为​​a​​。
  • 关闭会话:​​tmux kill -session -t sessionName​​或者​​tmux kill -server​​。
    我们可以使用tmux的​​kill​​命令,其中kill命令有四种:​​kill -pane, kill -server, kill -session, kill window​​。根据需求我们使用自己需要的命令,需要注意的是,根据前面的联系,我们关闭了​​session​​,那么其中的所有​​pane​​和​​window​​也都不存在了,同理关闭​​server​​,那么所有​​session​​也都不存在了。所以这里即是使用​​kill -session​​和​​kill -server​​,前者关闭​​sessionName​​这个会话,后者关闭所有的会话。
  • 查看所有的会话:​​tmux ls​​。
    Linux基础课 第二章、tmux和vim教程_方向键_02
  • 切换会话:​​switch​​命令用于切换会话。
# 使用会话编号来切换
tmux switch -t 0
# 使用会话名称来切换
tmux switch -t sessionName
  • 重命名会话:​​tmux rename-session -t sessionName new Name​​。
  • 常用会话操作快捷键。

前缀

指令

功能

​Ctrl+b​

d

断开当前会话

​Ctrl+b​

D

选择要断开的会话

​Ctrl+b​

$

重命名当前会话

​Ctrl+b​

s

列出当前会话用于选择并切换

​Ctrl+b​

r

强制重载当前会话

​Ctrl+b​

ctrl + z

挂起当前会话

  • tmux中复制/粘贴文本的通用方法。
    (1).按下​​Ctrl + b​​前缀键,然后按​​[​​;
    (2).用鼠标选中文本,然后被选中的文本会被自动复制到tmux的剪贴板;
    (3).按下​​Ctrl + b​​后前缀键,然后按​​]​​,会自动将剪贴板的内容粘贴到光标处。

1.4.3 窗口(window)操作

  • 新建窗口:​​tmux new-window -n windowName​​。
    如此我们可创建一个新的名为windowName的窗口。当然我们也可以直接输入​​tmux new-window​​来创建一个没有指定名称的窗口。 创建一个新窗口后,原窗口我们是看不到了的,但依然存在。
  • 切换窗口:​​tmux select-window -t windowName​​。
  • 重命名窗口:​​tmux rename-window windowName​​。
  • 常用窗口操作快捷键。

前缀

指令

功能

​Ctrl+b​

c

新建窗口

​Ctrl+b​

&

关闭当前窗口,需要输入​​y or n​​确认

​Ctrl+b​

编号

切换到指定编号的窗口

​Ctrl+b​

p

切换到上一个窗口

​Ctrl+b​

n

切换到下一个窗口

​Ctrl+b​

w

显示窗口列表用于切换。

​Ctrl+b​

,(逗号)

重命名当前窗口

​Ctrl+b​

.

修改当前窗口编号(适用于窗口排序)

​Ctrl+b​

f

快速定位到窗口(输入关键字匹配窗口)


1.4.4 面板(pane)操作

  • 划分面板。
    注意,此划分是针对当前选中的面板,面板可以无限划分。
# 划分成上下两个面板
tmux split-window
#划分成左右两个面板
tmux split-window -h

Linux基础课 第二章、tmux和vim教程_vim_03

  • 切换面板。
    ​tmux select-pane​​命令用来移动光标位置,这个更严谨的说应该是切换光标,因为我们的光标正好可以选中面板,即可以通过鼠标点击选中。当然,前者过于简单且没有逼格,我们可以通过快捷键或者命令来实现。
# 光标切换到上方面板
tmux select-pane -U
# 光标切换到下方面板
tmux select-pane -D
# 光标切换到左方面板
tmux select-pane -L
# 光标切换到右方面板
tmux select-pane -R
  • 交换面板位置。
    ​tmux swap-pane​​可用于交换面板位置。同切换面板差不多的形式。
# 上移
tmux swap-pane -U
# 下移
tmux swap-pane -D
# 左移
tmux swap-pane -L
# 右移
tmux swap-pane -R
  • 常用面板操作快捷键。

前缀

指令

描述

​Ctrl+b​

​"​

当前面板上下一分为二,下侧新建面板

​Ctrl+b​

​%​

当前面板左右一分为二,右侧新建面板

​Ctrl+b​

​x​

关闭当前面板(关闭前需输入​​y​​​ or ​​n​​确认)

​Ctrl+b​

​z​

最大化当前面板,再重复一次按键后恢复正常(v1.8版本新增)

​Ctrl+b​

​!​

将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效)

​Ctrl+b​

​;​

切换到最后一次使用的面板

​Ctrl+b​

​q​

显示面板编号,在编号消失前输入对应的数字可切换到相应的面板

​Ctrl+b​

​方向键​

移动光标切换面板

​Ctrl+b​

​hjkl(分别代表左下上右)​

移动光标切换面板

​Ctrl+b​

​{​

向前置换当前面板

​Ctrl+b​

​}​

向后置换当前面板

​Ctrl+b​

​Ctrl+o​

顺时针旋转当前窗口中的所有面板

​Ctrl+b​

​o​

选择下一面板

​Ctrl+b​

​空格键​

在自带的面板布局中循环切换

​Ctrl+b​

​Alt+方向键​

以5个单元格为单位调整当前面板边缘

​Ctrl+b​

​Ctrl+方向键​

以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖)

​Ctrl+b​

​t​

显示时钟


2 vim使用教程

2.1 vim简介

vim就是linux系统上的一款文本编辑器,==具有语法高亮,代码补全,代码缩进,根据扩展名识别编程语言以及编译等方便编程的功能。==是程序开发者一款非常好用的工具,这也是我们为什么要学习vim。

==需要注意的是,作为程序员一般认为vim是一个程序开发工具而不是文字处理软件。==如果学会了vim,对编程效率有极大的提高。

如果没有安装vim,可以通过:​​sudo apt-get install vim​​​来安装。
Linux基础课 第二章、tmux和vim教程_快捷键_04

这个就是vim的界面,界面介绍在之后会介绍,同时vim对应的键盘功能图如下:

Linux基础课 第二章、tmux和vim教程_linux_05

​ 图源:​​https://www.runoob.com/linux/linux-vim.html​​

这个键盘图特别重要,也是vim的核心。

2.2 vim模式

在使用vim之间,我们有必要了解它的模式,也可以认为是状态,一共有四种模式:

  • 正常模式(Normal-mode);
  • 插入模式(Insert-mode);
  • 命令模式(Command -mode);
  • 可视模式(Visual-mode)。

有的时候通常也认为是三个模式,即没有可视模式(可能是因为这个模式存在感低)我们可以参考下图理解模式之间的转换:
Linux基础课 第二章、tmux和vim教程_vim_06

接下来我们分别介绍这几个模式。

2.2.1 正常模式(Normal-mode)

此模式一般用于浏览文件,包括一些复制,粘贴,删除等操作。我们从任何模式返回到正常模式,只需要按下​​ESC​​键。

当我们通过​​vim 文件名.后缀​​​启动vim时,就进入到了正常模式,如果已有文件,则打开它,否则就打开一个新的文件,并命名为​​文件名​​。

此时我们是无法向文件写内容的,此状态下敲击键盘会被vim识别为命令,而不是输入字符。

当我们输入​​i​​,​​I​​, ​​a​​,​​A​​ 时会进入插入模式。

当我们输入​​v​​时会进入可视模式。

当我们输入​​:​​时会进入命令模式,即在最底下一行输入命令。所以也叫底线命令模式。

要重点介绍的一个内容就是如何删除、复制,剪切以及粘贴了。vim对于复制,剪切,粘贴有它自己的一套术语。其中复制被叫做yank(y), 剪切被叫做​​delete(d)​​​,粘贴被叫做​​put(p)​​。

  • 删除
  • ​c​​​ -向下删除一行。如果要删除多行,则输入​​nc​​​,即可向下删除Linux基础课 第二章、tmux和vim教程_服务器_07行。
  • ​x​​​ - 向后删除一个字符,相当于​​del​​​按键。如果要连续删除多个字符,则输入​​nx​​​,即可删除Linux基础课 第二章、tmux和vim教程_服务器_07个。
  • ​X​​​ -向前删除一个字符, 相当于​​Backspace​​​按键。同理​​nX​​。
  • 复制(yank)
    我们如果需要复制文本,那么需要将光标放到你想要复制的地方,然后根据需求按下相应命令即可。
  • ​y​​ -复制选中的文本(选中文本在视图模式中会讲到)。
  • ​yy​​ -复制当前行,包括换行符。
  • ​<number>yy​​​ -复制从光标所在的当前行开始的number行文本。
    例如​​3yy​​即可复制从当前行开始的Linux基础课 第二章、tmux和vim教程_vim_09行文本。
  • ​y$​​ -复制从光标位置到行尾的文本。
  • ​y^​​ -复制从光标位置到行首的文本。
  • ​yw​​ -复制到下一个词的开头。
  • ​yiw​​ - 复制当前词。
  • ​y%​​​ -复制匹配符号范围的内容。默认支持的符号对为​​()​​,​​{}​​,​​[]​​。这个在复制括号内容时,非常有用。
  • ​yG​​ -复制游标所在行到最后一行的行的所有数据。
  • ​ynG​​​ -n为数组,复制游标所在行到第Linux基础课 第二章、tmux和vim教程_方向键_10行的所有数据。
  • 剪切(delete)
    这个命令正常来说也可以作删除用。剪切文本时将光标移动到想要的位置,根据需求按下相应命令即可。
  • ​d​​ -剪切选中的文本。
  • ​dd​​ -剪切当前行,包括换行符等。
  • ​<number>dd​​ -剪切从光标位置所在的行开始的number行文本。
  • ​d$​​ - 剪切从光标位置到行尾的内容。
  • …不难发现,这些命令和复制差不多,就是将​​y​​换成​​d​​。这里就不再做阐述了。
  • 粘贴(put)
    先将光标移动到想要粘贴的位置,然后按​​p​​键即可将剪贴板的内容复制到当前光标后面。
    当然,大写的​​P​​则是复制到光标位置前面。
  • 其他常用操作

快捷键

功能

J

将光标所在行与下一行的数据结合成同一行

​gg=G​

将全文代码格式化

u

撤销。(常用)

​Ctrl+r​

取消撤销。(常用)

这个 ​​u ​​​与 ​​Ctrl+r​​ 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!

​.​

不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)

​n​

重复前一个查找操作(常用)

​N​

反向重复前一个查找操作(常用)


其他的不常用操作这里不作列举。

我们可以通过方向键操作光标位置,注意linux中的方向键可以通过​​hjkl​​分别代表左下上右。这里给出移动光标的方法表格:

快捷键

功能

h 或 向左箭头键(←)

光标向左移动一个字符

j 或 向下箭头键(↓)

光标向下移动一个字符

k 或 向上箭头键(↑)

光标向上移动一个字符

l 或 向右箭头键(→)

光标向右移动一个字符

如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!

​Ctrl] + f​

屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)

​Ctrl + b​

屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)

​Ctrl + d​

屏幕『向下』移动半页

​Ctrl] + u​

屏幕『向上』移动半页

​+​

光标移动到非空格符的下一行行首

​-​

光标移动到非空格符的上一行行首

​n<space>​

那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。

0 或功能键``Home`

这是数字『 0 』:移动到这一行的最前面字符处 (常用)

$ 或功能键``End`

移动到这一行的最后面字符处(常用)

​H​

光标移动到这个屏幕的最上方那一行的第一个字符

​M​

光标移动到这个屏幕的中央那一行的第一个字符

​L​

光标移动到这个屏幕的最下方那一行的第一个字符

​G​

移动到这个档案的最后一行(常用)

​:n​​​或​​nG​

n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)

​gg​

移动到这个档案的第一行,相当于 1G 啊! (常用)

​n<Enter>​

n 为数字。光标向下移动 n 行(常用)

​f{char}​

光标跳转到光标所在行从光标开始之后的​​char​​​字符处。即从光标位置到该行尾检索​​char​​字符,光标位置前的不处理

​F{char}​

光标跳转到光标所在行从光标开始之前的​​char​​​字符处。即从行开头到光标处检索​​char​​字符,光标位置前的不处理

​W​​​或者​​w​​(大小写均可)

跳转到下一个单词的开头。支持数字前缀

​b​​​或者​​B​​(大小写均可)

跳转到上一个单词的开头。支持数字前缀。

​{​

光标跳转到段首

​}​

光标跳转到段尾

​^​

光标跳转到软行首。即该行的最早非空格位置字符。

​E​​​或​​e​​(大小写均可)

移动到词尾。

​(​

句首

​)​

下一句首

​%​

括号匹配。

正常模式只有一些基本的命令,因此我们需要靠命令模式来输入更多的命令。

2.2.2 插入模式(Insert-mode)

由上相信大家应该知道怎么由正常模式进入输入模式,即按下​​i​​(insert)即可进入插入模式。

在插入模式中,操作和正常的文本编辑器差不多,这里不作叙述。给出对应的快捷键操作表。

快捷键

功能

​Ctrl + m​​​或者​​Ctrl + j​

开启新行

​Ctrl + e​

插入光标下的字符

​Ctrl + y​

插入光标上的字符

​Ctrl + a​

插入上次插入的文本

​Ctrl + @​

插入上次插入的文本并结束插入模式

​Ctrl + w​

删除光标前的一个单词

​Ctrl + u​

删除当前行的所有字符

​Ctrl + T​

在当前行首插入一个移位宽度的缩进

​Ctrl + D​

从当前行首删除一个位移宽度的缩进

2.2.3 命令模式(Command -mode)

我们在一般命令模式下按下​​:/?​​这三个字母中的任意一个就可以进入命令行模式了,命令行在最下面,可以进行查找、替换、保存、退出、配置编译器等操作。需要注意的就是我们每执行完一个命令之后就会回到正常模式,所以在需要操作的时候一定要输入​​:/?​​这三个字母中的其中一个。

当然输入三个字母进入实现的命令是不一样的,这里给出具体操作。

  • ​/word​​ -向光标之下(向后搜索)寻找第一个值为word的字符串。
  • ​?word​​ -向光标之上(向前搜索)寻找第一个值为word的字符串。
  • ​:n1,n2s/word1/word2/g​​​ -n1与n2为数字,在第n1行与n2行之间寻找word1这个字符串,并将字符串替换为word2。
    如果在g后面加上​​c​​命令,即​​:n1,n2s/word1/word2/gc​​那么会在替换前要求用户确认。
  • ​:1,$s/word1/word2/g​​​ -将全文的word1替换成word2。
    同理,如果在g后面加上c命令,也会要求确认。
  • ​:w​​ -保存。
  • ​:w!​​ -强制保存,当文件属性为只读时强制写入。不过这还是跟你对该文档的权限有关。
  • ​:q​​ -退出vim。
  • ​:q!​​ -强制退出vim。
  • ​:wq​​ -保存并退出。
  • ​:set paste​​ -设置成粘贴模式,取消代码自动缩进。
  • ​:set nopaste​​ -取消粘贴模式,开启代码自动缩进。
  • ​:set nu​​ -显示行号。
  • ​set nonu​​ -隐藏行号。
  • ​:noh​​ -关闭查找关键词高亮。

2.2.4 可视模式(Visual-mode)

这个模式存在感很低,有的甚至将它归结为正常模式。因为进入可视模式最直接的一个目的就是选中区域,然后再这个区域上进行操作,例如删除,替换等。不过,我认为这个模式异常重要,因为技巧性特别多。用好了这个模式,效率能大大的提高。

  • 如何选中一块区域?
    在vim中有三种激活可视模式并选择一块区域的方法:

模式类型

激活方式

选择效果

左下角提示(即提示你当前处于何种模式)

字符文本

​v​​(小写)

逐个字符选择文本

​VISUAL​

行文本

​V​​(大写)

逐行选择文本

​VISUAL LINE​

块文本

​Ctrl + v​

按照块的方式选择文本

​VISUAL BLOCK​

可能看着有点懵。我们来解释一下,

  • 对于字符文本选择,实际上就是从当前光标位置开始,通过方向键去逐个字符连续选取文本,和我们在平常的文本编辑器中按住​​shift​​键移动方向键选取功能相同;
  • 对于行文本选择,那么也是从当前光标位置开始选择,通过方向键去逐行连续选取文本,和上一个区别在于粒度不一样,这个方式选择的最小单位是行;
  • 而对于块文本选择为最强大的选择模式,因为前面两种选择具有局限性,这个模式它可以完全无视行的存在,可以在文本中按照需要的区域自由u许纳泽。

我们来看一个例子:

假设我们要选择​​Hello,Linux​​,那么使用字符文本选择我们只需要将光标移动到​​H​​处,然后进入字符文本选择模式,再通过方向键选中即可。块文本选择同理操作即可。

  • 如何快速选择目标区域?
    如果通过以上模式而不使用快捷键选取,那么效率很低。而在正常模式中,我们已经介绍了很多快速移动光标的命令,而在可视模式下,这些快速移动光标的命令也是可以使用的。
  • 如何重复选择目标区域?
    可以使用​​​gv​​命令来重新选中之前选中的目标区域。
  • 对选中的区域进行操作

命令

命令效果

​d​

删除选中文本

​c​

修改选中文本

​r​

替换选中文本

​I​

在选中文本前插入

​A​

在选中文本后插入

​gu​

选中区域转为小写

​gU​

选中区域转为大写

​g~​

大小写互调

​>​

向右缩进一个单位

​<​

向左缩进一个单位


3 参考文献

​​Tmux 使用教程-阮一峰​​

​​Tmux使用手册-路易斯​​

​​tmux使用教程-小可七​​

​​y总Linux基础课​​

​​精通 VIM ,此文就够了-zempty​​

​​Linux vi/vim - runoob.com​​

vim编辑器 莫迟

由于作者有限,本文仅为博主总结整理以供学习记录,如有侵权或者问题请指出。


举报

相关推荐

0 条评论