#2 Vim 备忘录

2018-01-03

我并不是个 Vim 高手,但是我所掌握的知识对于轻量使用来说,也够用了。
这就是我能想到的全部 Vim 知识。

如果你是一个新手,看看这篇文章,应该可以快速入门 Vim,能解决所有简单编辑任务所会面临的问题。

基础知识

避免由于意外操作而不知所措。

模式

  • 普通模式(Normal):直接打开文件(vim filepath)就进入了这个模式,可以移动光标,执行一些指令
  • 插入模式(Insert):像普通编辑器一样编辑文本
  • 可视模式(Visual):先在普通模式下移动光标到目标区域,然后切换到可视模式,这时移动光标就可以选中一块区域,对着块区域的内容执行一些命令
  • 命令模式:在 Vim 底部输入命令,按回车执行
  • 选择模式(Select):正常我们能够理解的选中,然后删除或者对着一块进行替换
  • Ex 模式:。。。

模式切换:

  1. 在任何模式下按 Esc 就可以回到普通模式
  2. 普通模式下,按 i 进入插入模式;
  3. 普通模式下,按 v 进入可视模式(字符);
  4. 普通模式下,按 V 进入可视模式;
  5. 普通模式下,按 Ctrl + v 进入可视模式;
    1. Windows 系统下 Ctrl + v 被占用作为粘贴快捷键,可以使用 Ctrl + q 代替;
  6. 普通模式下,按 : 进入命令模式;
  7. 可视模式下,按 Ctrl + g 进入选择模式;
  8. 选择模式下,可以按 Ctrl + o 回退到可视模式;

快捷键

上下左右,翻页(PageUp,PageDown),删除(Backspace,Del)本身就可以用,就不用记快捷键了。

Key Function
u 撤销
dd 删除当前行
3dd 删除当前行 + 后面两行(共 3 行)
>> 缩进
<< 取消缩进
== 自动对齐

使用命令 5d 删除第五行
使用命令 5,10d 删除第 5 到第 10 行

跳转

Key Function
gg 跳到第一行
20gg 跳到第 20 行
G 跳到最后一行
10j 往前跳 10 行
10k 往后跳 10 行

hjkl 本身用来表示左上下右,所以...

复制粘贴

Key Function
yy 复制当前行
3yy 复制当前行 + 后面两行(共 3 行)
yw 复制当前单词和后面的空白字符
p Paste 粘贴在当前行、字符后面
P Paste 粘贴在当前行、字符前面

搜索

Key Function
? 向后搜索(正则)
/ 向前搜索(正则)
# 向后搜索当前单词,等同于输入 #\<xxx\>
* 向前搜索当前单词,等同于输入 /\<xxx\>
  1. n/N 跳到上一处或下一处
  2. \cp[a-z]*n 忽略大小写,搜索 p 开头,n 结尾的单词

命令

一般都有取消配置的 set noXXX 命令。

Key Function
set nu 显示行号
set paste 粘贴模式(避免开启自动缩进时,会弄乱粘贴内容)
set ignorecase / set ic 搜索忽略大小写
set hlsearch 高亮搜索结果(似乎是默认)
set nohlsearch 取消高亮搜索结果
noh 关闭高亮
set listchars=tab:>~,trail:. 显示 TAB 键和行末空格
set cursorline 当前行加上下划线

替换

Key Function
s/Gitee/Gitea/g 将当前行所有 Gitee 替换成 Gitea
%s/Gitee/Gitea/g 将所有行所有 Gitee 替换成 Gitea
%s/Gitee/Gitea/gi ...忽略大小写
%s/Gitee/Gitea/gin ...不真正执行,只反馈印象范围
5,10s/Gitee/Gitea/g 将第 5 到 10 行所有 Gitee 替换成 Gitea
.,+5s/Gitee/Gitea/g 将当前行到后两行所有 Gitee 替换成 Gitea

保存

Key Function
q 退出(可能会提示你:已修改但尚未保存)
w 保存
wq 保存并退出
x 保存并退出
q! 不保存,强行退出
:w !sudo tee % 没有写入权限的时候提权保存

清空数据:gg + 1000dd(跳到第一行,然后删除 1000 行)

> filepath
# 或
echo > filepath

参考资料与拓展阅读

#1 Linux 常用压缩命令 CheatSheet

2017-03-22

rar

rar a xxx.rar files...
rar e xxx.rar ./

rar a -p123456 xxx.rar files...
rar e -p123456 xxx.rar ./

rar a -v20m xxx.rar files...

tar

常用的参数说明(grep "^ \-[a-zA-Z0-9]" <(tar --help) | sort):

  • vf 分别表示输出详细信息、指定压缩包名称
  • x 解压
  • c 压缩
  • t 列出压缩包里面的文件列表
  • 压缩文件类型(Linux 下最常用的两种):
  • z:gz
  • j:bz2
# To extract an uncompressed archive:
tar -xvf /path/to/foo.tar

# To create an uncompressed archive:
tar -cvf /path/to/foo.tar /path/to/foo/

# To extract a .gz archive:
tar -xzvf /path/to/foo.tgz

# To create a .gz archive:
tar -czvf /path/to/foo.tgz /path/to/foo/

# To list the content of an .gz archive:
tar -ztvf /path/to/foo.tgz

# To extract a .bz2 archive:
tar -xjvf /path/to/foo.tgz

# To create a .bz2 archive:
tar -cjvf /path/to/foo.tgz /path/to/foo/

# To list the content of an .bz2 archive:
tar -jtvf /path/to/foo.tgz

# To create a .gz archive and exclude all jpg,gif,... from the tgz
tar czvf /path/to/foo.tgz --exclude=\*.{jpg,gif,png,wmv,flv,tar.gz,zip} /path/to/foo/

# To use parallel (multi-threaded) implementation of compression algorithms:
tar -z ... -> tar -Ipigz ...
tar -j ... -> tar -Ipbzip2 ...
tar -J ... -> tar -Ipixz ...

zip

# Create zip file
zip archive.zip file1 directory/

# To list, test and extract zip archives, see unzip
cheat unzip

# Extract archive
unzip archive.zip

# Windows 下创建的压缩包放到 Ubuntu 下解压可能会有编码问题
unzip archive.zip -O gbk

# Test integrity of archive
unzip -tq archive.zip

# List files and directories in a file
unzip -l archive.zip

7z

sudo apt install p7zip-full
dpkg -L p7zip-full p7zip | grep bin/
# /usr/bin/7z
# /usr/bin/7za
# /usr/bin/7zr
# /usr/bin/p7zip

文档中说是支持 7z,xz,tar,gz,zip,bz2,iso,rpm,deb 等等等等格式,不过没用过。

# 压缩
7z a  xxxx.7z files...
# 解压
7z e  xxxx.7z
# 查看文件列表
7z l  xxxx.7z

参考

  1. man
  2. --help
  3. cheat / tldr