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 相反,为取消行号 |