Linux vim 梳理

1,142 阅读6分钟

Linux vim

概况

vim 的三种模式:命令模式(Command mode),输入模式(Insert mode),底线命令模式(Last line mode)

命令模式

启动 vim,便进入了命令模式,此状态下敲击键盘动作会被 vim 识别为命令

常用命令:

 i 切换到输入模式
 x 删除光标所在处的字符
 u 撤销命令
 : 切换到底线命令模式,以在最底一行输入命令
输入模式

在命令模式下按下 i 就进入了输入模式,这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式,按 ESC 键可随时退出底线命令模式

基本命令(已经省略了冒号):

q 退出程序
w 保存文件

查看文件大小

不要使用 vim 打开大文件,vim 会一次性读取所有内容到内存,容易造成宿主机内存溢出。

打开文件前,可以使用 du -h 命令查看文件大小,一般 100MB 以下为宜。

du -h README.md

配置文件

vim 的配置文件有两个版本:全局版本和用户版本。

全局 vimrc 文件在 vim 的安装目录中,可以通过在命令模式下输入 :echo $VIM 获取 vim 的安装目录,mac 是 /usr/share/vim。

用户版本的 vimrc 文件在当前用户的主目录下,可以通过在命令模式下输入 :echo $HOME 查看用户主目录,mac 是 /Users/用户名。

但是 mac 默认是没有用户版本的配置文件,所以需要自己新建一个:

cp /usr/share/vim/vimrc ~/.vimrc // 复制一份全局配置文件到用户的主目录下

用户版本的配置文件会覆盖全局版本的配置文件,所以只需要修改用户主目录下的配置文件就可以了。

常用配置
set nu[mber] " 显示行号
set nonu[mber] " 隐藏行号
syntax on " 开启语法高亮
set ruler " 在右下角显示光标位置信息
set showmatch " 高亮显示对应的括号
set tabstop=4 " 设定 tab 键长度为 4
set hlsearch " 高亮匹配
set incsearch " 在输入字符串过程中显示匹配点
set ignorecase " 搜索忽略大小写
set autoindent " 自动缩进
" 设置编码格式
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 " Vim 写入文件时采用的编码类型
set termencoding=utf-8 " 输出到终端时采用的编码类型
set encoding=utf-8 " 用于缓存的文本、寄存器、Vim 脚本文件等
主题配置
下载 vim-colors-solarized
cd ~
git clone https://github.com/altercation/vim-colors-solarized.git
mkdir .vim
cd .vim
mkdir colors
cd ~/vim-colors-solarized/colors
mv solarized.vim ~/.vim/colors/
配置 .vimrc
" 主题
syntax enable
set background=dark
let g:solarized_termcolors=256 " 不配置的话,默认是16位颜色的,效果不好,建议配置成256的
colorscheme solarized
文件目录树
下载 nerdtree
cd ~
git clone https://github.com/scrooloose/nerdtree.git
cp -r ~/nerdtree/. ~/.vim
vim [file.name]
:NERDTree

可以在 .vimrc 中设置快捷键(如 f3)来显示/隐藏文件树:

" Nerd Tree
map <F3> :NERDTreeMirror<CR>
map <F3> :NERDTreeToggle<CR>
常用命令
快捷键
[Ctrl] + [w] + [w] 光标在左右侧窗口切换
[Ctrl] + [w] + [r] 切换当前窗口左右布局
q 关闭 NerdTree 窗口
I 切换是否显示隐藏文件
o 打开文件,目录或者书签,和我们在对应节点上按回车键一个效果
go 打开文件,但是光标仍然停留在目录中
x 合拢选中结点的父目录
p 跳到上级目录结点
P 跳到根目录结点
i 打开选中文件,上下分屏并跳到该窗口
gi 打开选中文件,上下分屏, 不跳到该窗口
s 打开选中文件,左右分屏并跳到该窗口
gs 打开选中文件,左右分屏,不跳到该窗口
r 刷新 NerdTree
? 切换是否显示 Quick Help

按键说明

一般模式可用的光标移动、复制粘贴、搜索替换等
移动光标的方法
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
"nj" 或 "n↓" n 表示『数字』,例如 30, 则向下移动 30 行
[Ctrl] + [f] 屏幕『向下』移动一页
[Ctrl] + [b] 屏幕『向上』移动一页
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
n n 表示『数字』,如 6 光标会向右移动 6 个字符距离
0 移动到这一行的最前面字符处 (常用)
$ 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行(常用)
nG n 为数字,移动到这个档案的第 n 行(可配合 :set nu)
gg 移动到这个档案的第一行 (常用)
n n 为数字,光标向下移动 n 行(常用)
搜索替换
/word 向光标之下寻找一个名称为 word 的字符串(常用)
?word 向光标之上寻找一个名称为 word 的字符串(常用)
n 重复前一个搜寻的动作
:1,$s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc 在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
删除、复制与贴上
x, X x 为向后删除一个字符, X 为向前删除一个字符
nx n 为数字,连续向后删除 n 个字符
dd 删除游标所在的那一整行(常用)
ndd n 为数字,删除光标所在的向下 n 行(常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 删除游标所在处,到该行的最前面一个字符
yy 复制游标所在的那一行(常用)
nyy n 为数字,复制光标所在的向下 n 行(常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行
J 将光标所在行与下一行的数据结合成同一行
u 复原前一个动作,即回撤(常用)
. 重复前一个动作(常用)
一般模式切换到编辑模式的可用的按钮说明
进入输入或取代的编辑模式
i I i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』 (常用)
a A a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』(常用)
o O o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行(常用)
[Esc] 退出编辑模式,回到一般模式中(常用)
一般模式切换到指令行模式的可用的按钮说明
指令行的储存、离开等指令
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
vim 环境的变更
:set nu 显示行号
:set nonu 与 set nu 相反,为取消行号