vim
1. 使用vim
在终端输入
vim
打开vim编辑器
退出vim(先esc键)
:q
暂时退出vim
control + z 暂时退出vim
fg 回到vim
2. 在vim里打字
按键 | 功能 |
---|---|
i | 插入 |
o | 向下插入一行 |
a | 在光标后插入字符 |
esc 或 control + [ | 退出插入模式 |
:w 或 :w name.c | 保存 或 保存+空格+文件名(存文件) |
:wq 或 :wq name.c | 保存并退出 或 保存并退出+空格+文件名(存文件) |
:qa | 退出所有vim窗口(同时开启多个档案的前提下) |
:qa! | 强制退出所有vim窗口 |
3. 在vim里移动光标
按键 | 功能 |
---|---|
h | ⬅️ |
j | ⬇️ |
k | ⬆️️ |
l | ➡️ |
w | (Word) 向后一个单词(不跳过标点) |
W | (Word) 向后一个单词(跳过标点) |
b | (Backward) 向前一个单词(不跳过标点) |
B | (Backward) 向前一个单词(跳过标点) |
} | 向下一个段落 |
{ | 向上一个段落 |
G | 跳到文件最后一行 |
gg | 跳到文件第一行 |
0 | 跳到当前行的行头 |
$ | 跳到当前行的行尾 |
gj | 当前行过长被折叠时跳转下一行 |
gk | 当前行过长被折叠时跳转上一行 |
4. 在vim中search
按键 | 功能 |
---|---|
/ + 内容 (e.g. /and) | 查找内容and |
:set hlsearch | (High light) 高亮显示查找结果 |
:set nohlsearch | 取消高亮显示 |
n | (Next) 跳转下一条结果 |
N | 跳转上一条结果 |
? + 内容 (e.g. ?is) | 查找内容is (此时N和n的功能是反过来的) |
* | 查找游标所在单词 |
# | 查找游标所在单词 (此时N和n的功能是反过来的) |
f + 内容 (e.g. fa) | 查找同一行下一条内容 |
F + 内容 (e.g. Fa) | 查找同一行上一条内容 |
zz | 将游标所在行转到终端中间 |
zt | 将游标所在行转到终端最上面 |
zb | 将游标所在行转到终端最下面 |
5. 在vim中选择 复制 粘贴
按键 | 功能 |
---|---|
v | 进入 visual 模式 |
V | 进入 visual 模式并选取一整行 |
y | (Yank) 复制到默认暂存器 |
yy | 复制行 |
p | 在游标后粘贴 |
P | 在游标前粘贴 |
yy + 数字 + p (e.g. yy5p) | 复制行并粘贴5次 |
2yy | 一次复制2行 |
y + 组合键 | 复制目标内容(组合键参考 3.在vim中移动光标的内容) |
u | undo |
control + r | redo |
" + 字母 + y (e.g. "dy) | 将所选内容存入目标暂存器 (e.g. 将内容存入暂存器d中) |
" + 字母 + p (e.g. "dp) | 将目标暂存器中的内容粘贴 (e.g. 将暂存器d中的内容粘贴) |
:reg | 查看目前所有暂存器内容 |
6. 在vim中编辑文字
按键 | 功能 |
---|---|
i | 插入 |
I | 跳到行首并进入insert模式 |
o | 向下插入一行 |
O | 向上插入一行 |
a | 在光标后插入字符 |
A | 跳到行尾并进入insert模式 |
x | 删除 |
d | 删除所选内容 |
D | 删除游标后面一整行删除 |
dd | 删除行 |
数字 + dd (e.g. 2dd) | 删除两行 |
dG | 删除游标后全部内容 |
dgg | 删除游标前全部内容 |
c | 删除所选内容并进入insert模式 |
C | 删除游标后全部内容并进入insert模式 |
r + 内容 | replace 将游标处进行内容替换 |
>> | 将所在行进行内容缩进(tab) |
选择内容 + > | 将所选内容进行缩进 |
数字 + >> (e.g. 3>>) | 缩进3行 |
:set shiftwidth=2 | 设置默认缩进为2字符 |
选择内容 + = | 将所选内容进行缩进 |
7. 编辑多个档案
按键 | 功能 |
---|---|
:e FILENAME | 开启页 |
:tabe | 开启一个页 |
:tabe FILENAME | 开启目标页面 |
gt | 移动下一个页 |
gT | 移动上一个页 |
:new | 开启一个水平视窗 |
control + w + w | 转换当前编辑视窗 |
control + w + j | 向下转换当前编辑视窗 |
control + w + k | 向上转换当前编辑视窗 |
:vnew | 开启一个垂直视窗 |
control + w + l | 向右转换当前编辑视窗 |
control + w + h | 向左转换当前编辑视窗 |
vim -o a.cpp b.cpp | 同时开启a.cpp b.cpp两个文件(水平视窗) |
vim -O a.cpp b.cpp | 同时开启a.cpp b.cpp两个文件(垂直视窗) |
vim -p * | 同时开启文件夹下所有文件(页签方式) |
vim a.cpp b.cpp c.cpp | 同时开启 a.cpp b.cpp c.cpp 三个文件(buffer 模式) |
:tab ball 或 :tab ba | 将 buffer 中所有文件转换为 tab 模式 |
:ls | 查看开启了几个文档(会有1 2 3 4 这样的标志) |
:b2 (b is buffer) | 开启上一条中第2个文档 |
Control + shift + 6 (control + ^) | 切换上一个 buffer |
:b FILENAME | 开启目标文件 FILENAME 可以简写 |
:bnext 或 :bn | 开启下一个文件 |
:bprevious 或 :bp | 开启上一个文件 |
:blast 或 :bl | 开启最后一个文件 |
:bfirst 或 :bf | 开启第一个文件 |
:bdelete 或 :bd | 关闭当前文件 |
8. 更多选择方式
按键 | 功能 |
---|---|
V | Visual Line 模式(选择一整行) |
Control + v | Visual Block 模式(使用 k 或 j 向上或下选择一个块) |
I ( 大写 i ) | 光标前插入(esc 后会将选择的内容 全部加上插入的内容,常用于注释) |
viw | 选择光标所在的单词 |
vaw | 选择光标所在的单词(包括后面的空格) |
vi" | 选择双引号里面的所有内容 (i is inner) |
va" | 选择双引号及里面的所有内容 (a is around) |
vit | 选择 tag(标签) 里面的内容 |
vat | 选择 tag(标签) 及里面的内容 |
v} | 选择一个段落 ( 大括号是段落的意思 ) |
diw | 删除光标所在的单词 |
同理,将上面的 v 更改为 d 就是删除 (d is delete) | |
更改为 c 就是更改 (c is change) |
9. 文本属性
按键 | 功能 |
---|---|
名词 | |
w | word |
s | sentence |
p | paragraph |
t | tag |
’ | 单引号 |
" | 双引号 |
( | 小括号 |
[ | 中括号 |
{ | 大括号 |
动词 | |
y | yank |
p | paste |
d | delete |
c | change |
范围 | |
i | inner |
a | a or around |
量词 | |
1 2 3 4 … | numbers |
常用语法:动词 + 范围 + 名词;量词 + 动词
10. 其他实用小技巧
按键 | 功能 |
---|---|
^ | 光标移动到行头,不包含空格 |
数字 + G (e.g. 10G) | 光标移动到第10行 |
:set number or :set nu | 显示绝对行号 |
:set nonumber or :set nonu | 取消绝对行号 |
:set rnu | 显示相对行号 |
:set no rnu | 取消相对行号 |
Control + f | pagedown |
Control + b | pageup |
zf (前提 control + v 选择目标行,动词) | 折叠选中的内容 |
zd or l | 显示折叠的内容 |
zfip (动词 + 范围 + 名词) | 折叠inner范围内的段落 |
~ | 将光标处的内容切换大小写 |
. | 重复上一步 (连续动作) |
J | 将下一行移到光标所在行 |
Control + w (insert模式下) | 删除光标前一个单词 |
Control + u (insert模式下) | 删除光标前本行全部内容 |
:h + (内容) | help文档 |
vimtutor(控制行下执行) | vim教程 |
11. 设定档
:h vimrc # 查看设定档案的help
vim ~/.vimrc # 编辑vimrc文件
source ~/.vimrc # 更新配置文件
~/.vimrc 的内容(各位各取所需,不必一模一样)
set rnu " 显示相对行号
set clipboard=unnamed " vim 和 vim 外程序共用粘贴
set hlsearch " 查找时高亮
set cursorline " 游标所在行添加下划线
set noswapfile " 取消 vim 自动保存 .swp 的功能
set softtabstop=4 " tab = 4 空格
set shiftwidth=4 " 使用 > 或 < 进行缩进时一次缩进4个空格
set expandtab " 使用空格代替tab
set showtabline=2 " 总是显示tabe栏(vim最上面的标签栏)
set splitbelow " 使用 :new 指令时,在当前视窗下方开辟水平视窗(默认为在上方开辟一个空白的水平视窗)
set splitright " 使用 :vnew 指令时,在当前视窗右边开辟一个垂直视窗(默认为在左边开辟一个空白垂直视窗)
set ignorecase " 不区分大小写
set incsearch " 搜索时,同步搜索
syntax on " 开启语法高亮
colorscheme default " 设置颜色主题(这里是默认主题,其它主题请自行网上冲浪挑选)
filetype on " 开启文件类型检测
filetype indent on " 开启该文件类型的自动缩进
filetype plugin on " 开启该文件类型的插件
这里的设定档可以参考 :h vimfiles
中的文件结构进行归类(这是vim建议的方式,使用这种文件结构不需要自己手动编写读取命令,vim会自动读取配置),也可以在 .vimrc
中使用 source $HOME/settings.vim
命令进行手动读取(这里的 ~/settings.vim 文件是由自己创建的,你可以按照自己的喜好创建)
附::h vimfiles
内容
*'runtimepath'* *'rtp'* *vimfiles*
'runtimepath' 'rtp' string (default:
Unix: "$HOME/.vim,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
$HOME/.vim/after"
Amiga: "home:vimfiles,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
home:vimfiles/after"
MS-Windows: "$HOME/vimfiles,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
$HOME/vimfiles/after"
macOS: "$VIM:vimfiles,
$VIMRUNTIME,
$VIM:vimfiles:after"
Haiku: "$BE_USER_SETTINGS/vim,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
$BE_USER_SETTINGS/vim/after"
VMS: "sys$login:vimfiles,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
sys$login:vimfiles/after")
global
This is a list of directories which will be searched for runtime
files:
filetype.vim filetypes by file name |new-filetype|
scripts.vim filetypes by file contents |new-filetype-scripts|
autoload/ automatically loaded scripts |autoload-functions|
colors/ color scheme files |:colorscheme|
compiler/ compiler files |:compiler|
doc/ documentation |write-local-help|
ftplugin/ filetype plugins |write-filetype-plugin|
import/ files that are found by `:import`
indent/ indent scripts |indent-expression|
keymap/ key mapping files |mbyte-keymap|
lang/ menu translations |:menutrans|
menu.vim GUI menus |menu.vim|
pack/ packages |:packadd|
plugin/ plugin scripts |write-plugin|
print/ files for printing |postscript-print-encoding|
spell/ spell checking files |spell|
syntax/ syntax files |mysyntaxfile|
tutor/ files for vimtutor |tutor|
" 剩余内容过多,请自行查看
12. vim插件
12.1 安装插件工具
推荐使用 vim-plug (https://github.com/junegunn/vim-plug)
下面是链接中的安装方法,建议在链接中查看效果更佳
Installation
Download plug.vim and put it in the "autoload" directory.
Vim
Unix
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
You can automate the process by putting the command in your Vim configuration file as suggested here.
Windows (PowerShell)
iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni $HOME/vimfiles/autoload/plug.vim -Force
Neovim
Unix, Linux
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
Linux (Flatpak)
curl -fLo ~/.var/app/io.neovim.nvim/data/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Windows (PowerShell)
iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni "$(@($env:XDG_DATA_HOME, $env:LOCALAPPDATA)[$null -eq $env:XDG_DATA_HOME])/nvim-data/site/autoload/plug.vim" -Force
我用的是Mac电脑配置vim,所以直接使用下面命令即可
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
12.2 安装插件
安装链接中的教程,在 ~/.vimrc
中编写添加
call plug#begin()
" 下面是插入制定插件的示范:在单引号中添加你需要添加的插件的github地址
" 例如:https://github.com/junegunn/vim-easy-align 只需要写 junegunn/vim-easy-align 即可
Plug 'junegunn/vim-easy-align'
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug '~/my-prototype-plugin'
call plug#end()
上面只是指定你要安装哪些插件,还需要重新加载 .vimrc :source %
并且执行 :PlugInstall
命令才能完成安装
12.3 git提交(可选)
这里建议将 ~/.vimrc
文件移动或 Symbolic Link 到 ~/.vim
中,便于以后对 .vim 文件夹进行git操作(不进行git操作就不需要这个操作)
mv ~/.vimrc .vim
cd ~/.vim
ln -s ./.vim/.vimrc .
" 在 ~ 目录下查看为下面的样子就算OK了
(base) ran@192 ~ % ls -al | grep vimrc
lrwxr-xr-x 1 ran staff 22 8 30 15:49 .vimrc -> /Users/ran/.vim/.vimrc
对vim文件夹进行git
cd ~/.vim
git add .
git commit -m "init commit"