普通模式 (Normal-mode) 默认模式,进入方式:esc、C-[ 、C-c
插入模式 (Insert-mode) i、a、o、I、A、O
命令模式 (Command-mode) /、?、!
可视模式 (Visual-mode) v 选择字符
可视模式 (Visual-Line-mode) V 选择整行
可视模式 (Visual-Block-mode) C-v 块选择模式,可以列选择
替换模式(Replace-mode) R
普通-插入模式(Normal-Insert-mode) C-o 切换到该模式。执行一次普通模式后,自动回到插入模式
Vim帮助文档使用方法
:help xxx
如::help diw
"dl" delete character (alias: "x") dl
"diw" delete inner word diw
"daw" delete a word daw
"diW" delete inner WORD (see WORD) diW
"daW" delete a WORD (see WORD) daW
"dgn" delete the next search pattern match dgn
"dd" delete one line dd
"dis" delete inner sentence dis
"das" delete a sentence das
"dib" delete inner '(' ')' block dib
"dab" delete a '(' ')' block dab
"dip" delete inner paragraph dip
"dap" delete a paragraph dap
"diB" delete inner '{' '}' block diB
"daB" delete a '{' '}' block daB
再如: :help keycodes
notation meaning equivalent decimal value(s) ~
-----------------------------------------------------------------------
backspace CTRL-H 8 *backspace*
tab CTRL-I 9 *tab* *Tab*
carriage return CTRL-M 13 *carriage-return*
same as **
same as **
escape CTRL-[ 27 *escape* **
space 32 *space*
Ctrl + S
只是停止向终端输出而已
Ctrl + Q
恢复
count operator count motion
3 dycv 5 iw
- operator:干什么
- count:干多少次
- motion: 在哪干
The motion commands can be used after an operator command, to have the command operate on the text that was moved over. That is the text between the cursor position before and after the motion. Operators are generally used to delete or change text.
:h operator 查看操作符
:h motion 查看动作。一个移动光标的命令
hjkl 左下上右
wb 下、上个词
u 撤销操作undo
C-r (Ctrl + r) 重做redo
符号 | 含义 |
---|---|
d elete |
删除 |
c hange |
修改(删除并进入插入模式) |
y ank |
复制 |
v isual |
选中并进入visual模式 |
i/a 区别:i
nner / a
round
iw / aw : 选中单词 (普通模式),如diw/daw 删除单词
i | a | 例子 | 例子 |
---|---|---|---|
“foo ” |
"foo" |
di" : "" |
空 |
(foo ) |
(foo) |
di( 或 di) 或 dib :() |
da( 或 da) 或 dab : 空 |
{foo } |
{foo} |
di{ 或 di} 或 dib :{} |
da{ 或 da} 或 daB : 空 |
其他符号,如 '
、<
、[
等同理。
normal模式的操作
w/W 词头
b/B 上个词头,反向跳到词头
e/E 词尾
ge/gE 上个词尾
f字母 跳到字母
t字母:跳到字母前
F字母:向前跳到字母
T字母:向前跳到字母后的字母
; 重复操作上个命令
, 撤销上个操作回退
0 行首
^ 非空行首
g_ 非空行尾
$ 行尾
# 跳到当前光标所在单词上一个词
* 跳到当前光标所在单词下一个词
gg 跳到全文开头(相当于1G,首行)
G 跳到全文结尾行首非空(尾行)
% 当前文件所有行(:%d 删除所有行)
空 当前行
n+/n- 光标下、上移n行
C-d/C-f 向下翻半/1页
C-u/C-b 向上翻半/1页
:10/10G 跳到第10行
:% /:$ 跳到文件最后一行行首
zz 将当前行设为屏幕居中
/正则字符串+回车 正向跳到匹配字符串,追加n,正向下一个;追加N,反向下一个
?正则字符串+回车 反向跳到匹配字符串,追加n,正向下一个;追加N,反向下一个
:noh[lsearch] 移除搜索高亮
# 跳到当前光标所在单词上一个词
* 跳到当前光标所在单词下一个词
dd 删除一行
yy 复制一行 yank即为copy
cc 删除一行并进入插入模式
di{或di}或diB 删除{}中所有内容
diw 删除当前词,无论光标位置在词的哪个位置
dw 删除一个单词
dt) 删除当前到)前字符
d$ 删除当前字符到行尾字符
D 删除当前字符到行尾字符
vf) 向右高亮直到),含)
vt) 向右高亮直到)前一字符
cw 删除词当前字母之后部分并进入插入模式
ciw 删除当前词并进入插入模式
ct字母 删除到字母前的字符,不删除字母,并进入插入模式
C 删除当前字符到行尾字符,并进入插入模式
x 删除单个字符
r字符 替换当前字符,相当于删除+插入+返回normal模式
R字符串 替换字符串,需要返回normal模式结束替换
s 删除单个字符并进入插入模式
S 删除整行,并进入插入模式
o 向下一行插入空行,回车换行,尽量使用o替换
O 向上插入空行
p 光标后粘贴
P 光标前粘贴
:w 保存
:q 退出
:q! 强制退出
:wq/ZZ/:x 保存并退出
gd 跳到定义 goto definition
C-] 跳到定义
gf 打开光标处所指的文件
:delmark a 删除a标签
[` /]` 跳到上一个、下一个小写字符标签 (vscode不支持)
mM 创建全局标签M(A-Z 大写字母为全局标签、唯一、可跨文件跳转,a-z 为局部标签、不唯一,仅当前文件内)
`M 跳到标签M (技巧:浏览代码前,先打个全局标签,好回来)
`. 跳到上次修改位置
'. 跳到上次修改位置所在非空行首(vscode中是跳到精确上次修改位置)
`^ 跳到最后一次插入插入位置 (vscode不支持)
gi 跳到最后一次插入模式位置 go to the last place you left insert mode
g; 上次修改位置,再执行则逃到上上词修改位置
g, 下次修改位置
C-o 跳到上次光标位置
C-i 跳到下次光标位置
[[ 跳到当前函数开头(cpp ok, java不可以)
]] 跳到下一个函数开头(cpp ok, java不可以)
H/M/L 屏幕不动,光标动,跳到屏幕顶部、中间、底部
zz/zt/zb 光标不动,屏幕移动,使当前行处于屏幕中间、顶部、底部
( /) 跳到上/下一句
{ /} 跳到上/下一段
% 跳到匹配符号处,{}、()、[] 等,当前光标在一处,跳到匹配处
g~~ 切换行所有字符大小写
xp 交换两字符
:qa! 关闭所有文件且不保存 quit all
:%d或ggdGggVGd 删除所有行,清空全文
:%y或ggvG$y或ggVGy 拷贝全文
J 把下一行与当前行连接成一行
:marks 查看标签列表
:changes 查看修改列表
:jumps 查看跳转列表
<< shift line left 左移
>> shift line right 右移
== 格式化当前行
C-h 删除上一个字符
C-w 删除上一个词
C-u 删除上一行
@: repeat last ex command
@@ after repeating it once, you can continue repeating with this
~ 将光标下的字母切换大小写
3~ 将后面3个字母切换大小写
g~~ 将当前行的所有字母切换大小写
gUU/guu 将当前行切为大/小写
guiw/guaw 将当前词改为小写
gUiw/gUaw 将当前词改为大写
C-a 将本行光标或之后的首数字+1
C-x 将本行光标或之后的首数字-1
180 "0px" -> "-180px"
加减乘除四则运算:如计算 【20 * 3 + 2】,插入模式时执行 =20*3+2 即可
" 无名寄存器(unnamed register)。""p 等价于 p命令,粘贴无名寄存器内容
0 复制专用寄存器(yank register)。"0,只保存y{motion}复制的内容,即上次复制的内容。而无名寄存器还会保存c、x、s、d操作数据。
1-9 delete registers
a-z 有名寄存器。named registers
_ 黑洞寄存器。"_d{motion}会执行真正的删除操作
+ 系统寄存器
* 系统寄存器
"ay{motion} copy to register a 拷贝到寄存器a,小写会替换掉原寄存器内容
"Ay{motion} copy and append to register a 拷贝并追加到寄存器a,大写会追加内容
"ap paste from register a 粘贴寄存器a的内容
"add 删除当前行存到寄存器a
C-ra 插入模式时,从寄存器a粘贴内容
C-r0 从复制专用寄存器中粘贴内容
C-r% 插入当前文件名
q{register} 开始录制 Start recording a new macro in {register}
q 停止录制 Stop recording macro
@{register} 应用宏 Replay macro in {register}
@@ 再次应用上次应用的宏 Replay the last macro that you executed
命令行模式执行宏a :'<,'>normal @a
. 重复上次操作(从插入模式到normal模),也称为 “.范式”,可认为是最简单的宏
案例:一次复制,多次替换:1. yiw 2.viw"0p 3..(点范式) 4..
案例:交换两个词:1. yiw 2.mm 3. viwp 4. `m 5. vwp
A 跳到行末并进入插入模式
案例:对每行末尾都加上分号。1. A; 2. j. 3. j. 4... (来自《Vim实用技巧》)
C 等价c$ 删除当前字符到行尾的所有字符并进入插入模式
s 等价cl 删除当前字符并进入插入模式
I 等价^i 跳到非空行首并进入插入模式
/正则表达式 正向查找匹配项,n查下一处,N查上一处。 即回车键。
?正则 反向查
n/ N 正向/反向执行最后一次查找
:sort 或 :%sort 全文排序
:'<,'>sort 对选区行排序
:sort u 去除重复行排序
:sort i 忽略大小写对所有行排序
:.,.+3sort 对当前行到下3行共4行数据进行排序
:sort n 对全文每行按照数字排序
:sort! 倒序
C-h 插入模式时删除前一个字符
C-w 插入模式时删除前一个字
C-u 插入模式时删除到非空行首
命令行模式执行普通模式命令,如执行宏a:'<,'>normal @a ,再如行尾插入分号 :'<,'>normal A"
命令行模式执行上一次命令行命令 :C-p
命令行模式执行下一次命令行命令 :C-n
C-o 普通-插入模式,1次普通模式操作后自动进入插入模式,插入模式时修改很有用 :h i_CTRL-O
C-r{register} 插入模式时粘贴指定寄存器数据,如C-r0。[:h i_CTRL-R] Insert the contents of a register.
C-r% 插入模式时插入当前文件名
C-n或C-p 代码提示,再次按C-n或C-p选择提示
:t 复制行(如 :2,5t8 将2到5行复制到第8行下一行)
:.,.+5d 删除当前行到后5行(vscode支持)
:m 移动行 (如 :2,5m8,将2到5行剪切到第8行下一行,vscode不支持)
:copy(简写形式为 :co,等价缩写 :t) 拷贝(vscode不支持)
:2,5t. 将第2到5行拷贝到当前行下一行 (vscode不支持t点,可以为具体行号或标签)
:t6 将当前行拷贝到第6行下一行 (常用,vscode支持,:2,5t8 支持)
:t. 等价 yyp (vscode不支持)
:t$ 把当前行复制到文件最后一行(vscode不支持)
:'<,'>t0 将高亮选中的开始到结束部分拷贝到文档开头
:move(简写 :m) 移动(剪切+粘贴)
:[range]move{address}
案例:对所有行尾加上分号:1. A ; 2. jVG 3. :'<,'>normal .对高亮选区的每一行执行normal模式下的点命令
或上述3步改为1步完成:1. :%normal A ; 对全文按照普通模式,每行尾都增加分号// (vscode不支持)
或采用选择模式方案,选择所有行,然后A; 即 ggVGA;
或依然采用命令行模式方案,正则替换::1,$s/$/;/g 或 :%s/$/;/g 含义:范围1到最后一行每行都将行尾正则替换为分号 (vscode支持)
案例:对3到10行注释掉:1. :3,10 normal I// 3到10行执行普通模式I// (vscode不支持)
或 1. :3,10s/^/\/\//g (vscode支持)
:2,10s/hello/world/g 将2-10行内的hello全部都改为world(绝对行号)
:%s/hello/world/g 将全文的hello都改为world
:2,5s/aaa/bbb 将2到5行所有aaa都改为bbb
:.,.+5s/a/b 将当前行到下面第6行,共6行中所有a改为b
:5s/.*/-/g 将第5行所有字符都改为-
:%s/\/AA/g 将单词aa改为AA,包含aa的单词不会替换
地址范围符号及含义:
1 第一行
$ 最后一行
. 当前行
% 所有行,即 :1,$
'm 标签m所在行
'< 选区开始
'> 选区结束
flags替换标志位:
g(global) 全局
c(confirm) 替换前需确认
n(number) 统计匹配次数而不进行替换
. 重复上次普通模式命令
@: 重复上次Ex命令
@@ 回放最近调用的宏
命令模式时,快速拷贝光标下文本到命令行
o 选择模式时,切换高亮选区端点
gv 重选上次的高亮选区
Vr- 将当前行字符改为横杠
:r! echo {a..z} 插入26个小写字母,r表示读入,! 表示将执行shell命令,将右侧命令结果读入当前文件。
- 概念:
- buffer: 打开的一个文件的内存缓冲区,实际文件编辑就是编辑的缓冲区。
- window: buffer的可视化分割区域
- tab: 组织Window为一个工作区
- 优雅玩转Vim
- 玩转Vim 从放弃到爱不释手
:e a.txt 打开a.txt
:ls 或 :buffers 或 :files 查看缓冲区,显示出缓冲区编号、状态(%当前缓冲区 a激活缓冲区 +已更改缓冲区 -不可改缓冲区 #交换缓冲区 )、名称(同文件名)、光标所在行号
:b n 跳到第n个缓冲区
:b buffer_name 加上tab补全跳转到指定缓冲区
:bp[revious] /:bn[ext] /:bf[irst] /:bl[ast] 跳转到上一个/下一个/第一个/最后一个缓冲区,也可按tab补全,如:bp<TAB> 会自动补全为:bprevious,简写也可以
:ball 打开所有缓冲区
:wall! 强制保存所有缓冲区
:qall! 强制退出所有缓冲区
:badd xx 添加缓冲区xx
<C-w>s 或 :sp[lit] 水平分割窗口
<C-w>v 或 :vs[plit](vertical split) 垂直分割窗口
<C-w>w 循环切换窗口
<C-w>h/j/k/l 切换到←/↓/↑/→窗口
<C-w>H/J/K/L 移动当前窗口向←/↓/↑/→
<C-w>+ 增加窗口高度
<C-w>- 减少窗口高度
<C-w>= 所有窗口等宽等高
<C-w>_ 最大化当前窗口高度
<C-w>| 最大化当前窗口宽度
[N]<C-w>_ 当前窗口高度设置为[N]行
[N]<C-w>| 当前窗口宽度设置为[N]列
:h window-resize 查看文档
:tabs 查看所有打开的tab,有 > 箭头的是当前tab,有 + 说明有修改未保存,并显示tab页编号供tabp/tabn使用
:tabnew 新建标签页
:tabe a.txt 在新标签页打开a.txt
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabp[revious] 或 gT 上一个tab
:tabn[ext] 或 gt 下一个tab
:tabn[ext] [num] 或 [num]gt 切换到编号为[num]的标签页
<C-w>T 将当前窗口移动到新标签页
参考:https://blog.csdn.net/u014805066/article/details/62891949
查看配置文件方法:1)进入vim。2)执行 :version
,即可看vim版本,也可看vimrc配置路径。个人配置路径如下:
linux: $HOME/.vimrc
即 ~/.vimrc
windows: $HOME\_vimrc
即 C:\Users\用户名\_vimrc
:h option-list 查看所有设置选项
a-good-vimrc
.vimrc实用配置
https://github.com/wklken/k-vim/blob/master/vimrc
vim 配置 比较全
""""""""""""""""""""""""""""""""""""
"base
""""""""""""""""""""""""""""""""""""
let mapleader = "\"
let g:mapleader = "\"
" 共享剪贴板,ubuntu中无法使用共享剪贴板的话,需要安装 sudo apt-get install vim-gtk vim-scripts
if has('clipboard')
if has('unnamedplus') " When possible use + register for copy-paste
set clipboard=unnamed,unnamedplus
else " On mac and Windows, use * register for copy-paste
set clipboard=unnamed
endif
endif
" 防止粘贴代码格式错乱
nnoremap p :set paste
nnoremap np :set nopaste
" 更新时间毫秒数
set updatetime=100
" 命令行行数
set cmdheight=1
" history文件中需要记录的行数, !编号执行历史命令
set history=1000
"" 行号
set number
set nowrap
" set relativenumber
" 取消文件备份
set nobackup
set nowritebackup
set noswapfile
" Always show the signcolumn, otherwise it would shift the text each time
" diagnostics appear/become resolved.
set signcolumn=yes
" 设置缩进
set cindent
set smartindent
"设置这个新代码会缩进,但粘贴代码缩进会错乱
set autoindent
":set paste 后再粘贴可不错乱
":set nopaste 这样再恢复自动缩进
set smarttab
set expandtab "tab键自动转换为空格
set tabstop=4 "设置tab宽度
set shiftwidth=4
set softtabstop=4
" 00x增减数字时使用十进制
set nrformats=
set t_Co=256
"关闭vi的一致性模式
set nocompatible
" 按TAB键时命令行自动补全
set wildmenu
" 文件在Vim之外修改过,自动重新读入
set autoread
" 设置自动保存内容
set autowrite
" 状态栏显示命令
set showcmd
" 移动到buffer的顶部和底部时保留行距
" set scrolloff=3
" 懒渲染
set lazyredraw
" 当前行高亮
set cursorline
" 高亮括号匹配
set showmatch
"可以在buffer的任何地方->
"set mouse=a
"使用鼠标,类似office中->
"set selection=exclusive
"在工作区双击鼠标定位)
"set selectmode=mouse,key
"检测文件类型
filetype on
"针对不同的文件采取不同的缩进方式
filetype indent on
"针对不同的文件类型加载对应的插件
filetype plugin on
"启用自动补全
filetype plugin indent on
" 语法高亮
syntax enable
" 不设置则在插入模式时无法用退格键和 Delete 键删除回车符
set backspace=indent,eol,start
" 自动补全
set completeopt=longest,menu
" 搜索
set hlsearch
set incsearch
set ignorecase
set smartcase
"https://stackoverflow.com/questions/11940801/mapping-esc-in-vimrc-causes-bizarre-arrow-behaviour/11940894#11940894
" 注意:该配置存在刚打开文件后,模式为替换模式问题
nnoremap :nohlsearch
"noremap :nohlsearch
"set t_u7=
" 将默认实际行移动映射改为屏幕行移动,k原本为实际行,gk为屏幕行,实际一行文本过长可能有多屏幕行
nnoremap k gk
nnoremap gk k
nnoremap j gj
nnoremap gj j
" 命令行模式时快速移动光标位置
cnoremap
cnoremap
" 交换 ' `
nnoremap ' `
nnoremap ` '
" normal/ visual/ insert no Recursive map 非递归映射
inoremap jj '^
" 文件
nnoremap q :q
nnoremap w :w
nnoremap l :source $MYVIMRC
"nnoremap l :source ~/.vimrc
"nnoremap s :w !sudo tee %
"exe shell in normal mode
nnoremap r :r !
" 为了可以多次粘贴
nnoremap p "0p
nnoremap P "0P
vnoremap p "0p
vnoremap P "0P
" 切换buffer(:ls :bf[irst] :bl[ast] :bp[revious] :bn[ext])
nnoremap [b :bprevious
nnoremap [n :bnext
" 切换window (w)
map j
map k
map h
map l
"window split use hjkl key
nnoremap sl :set splitright:vsplit
nnoremap sh :set nosplitright:vsplit
nnoremap sj :set nosplitbelow:split
nnoremap sk :set splitbelow:split
"window size chage
map :resize +5
map :resize -5
map :vertical resize -5
map :vertical resize +5
"exe shell in normal mode
" 切换Tab
nnoremap :tabnext
nnoremap :tabprev
" Move a line of text using ALT+[jk] or Command+[jk] on mac
nmap mz:m+`z
nmap mz:m-2`z
vmap :m'>+`mzgv`yo`z
vmap :m'<-2`>my` fzf#install() } }
Plug 'junegunn/fzf.vim'
"翻译
Plug 'voldikss/vim-translator'
"markdown
"Plug 'godlygeek/tabular'
"Plug 'plasticboy/vim-markdown'
Plug 'tpope/vim-markdown'
Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']}
"表格工具
Plug 'dhruvasagar/vim-table-mode'
call plug#end()
""""""""""""""""""""""""""""""""""""
"lightline
""""""""""""""""""""""""""""""""""""
set laststatus=2
let g:lightline = {
\ 'colorscheme':'wombat'
\ }
set ttimeout ttimeoutlen=10
""""""""""""""""""""""""""""""""""""
"easymotion
""""""""""""""""""""""""""""""""""""
" Disable default mappings
" Disable default mappingslet g:EasyMotion_do_mapping = 0
" 搜索时忽略大小写
let g:EasyMotion_smartcase = 1
""""""""""""""""""""""""""""""""""""
"nerdtree
""""""""""""""""""""""""""""""""""""
nnoremap n :NERDTreeFocus
nnoremap :NERDTree
nnoremap :NERDTreeToggle
" 在文件树中定位到当前文件,配合 C-wp 再从文件树切回之前文件窗口
nnoremap :NERDTreeFind
" 显示隐藏文件
let ERDTreeShowHidden=1
let NERDTreeIgnore = [ '\.git$', '\.svn$', '\.svn%', '\.swp%', '\.vscode%' ]
" Exit Vim if NERDTree is the only window remaining in the only tab.
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
" Close the tab if NERDTree is the only window remaining in it.
autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
""""""""""""""""""""""""""""""""""""
"nerdcommenter
""""""""""""""""""""""""""""""""""""
"切换注释和取消注释
"[count]c |NERDCommenterToggle|
"注释
"[count]cc |NERDCommenterComment|
"取消注释
"[count]cu |NERDCommenterUncomment|
"将注释分隔符添加到行尾并进入它们之间的插入模式
"cA |NERDCommenterAppend|
""""""""""""""""""""""""""""""""""""
"gruvbox
""""""""""""""""""""""""""""""""""""
colorscheme gruvbox
set background=dark
"Use 24-bit (true-color) mode in Vim/Neovim when outside tmux.
"If you're using tmux version 2.2 or later, you can remove the outermost $TMUX check and use tmux's 24-bit color support
"(see < http://sunaku.github.io/tmux-24bit-color.html#usage > for more information.)
if (empty($TMUX))
if (has("nvim"))
"For Neovim 0.1.3 and 0.1.4 < https://github.com/neovim/neovim/pull/2198 >
let $NVIM_TUI_ENABLE_TRUE_COLOR=1
endif
"For Neovim > 0.1.5 and Vim > patch 7.4.1799 < https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162 >
"Based on Vim patch 7.4.1770 (`guicolors` option) < https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd >
" < https://github.com/neovim/neovim/wiki/Following-HEAD#20160511 >
if (has("termguicolors"))
set termguicolors
endif
endif
""""""""""""""""""""""""""""""""""""
"mbbill/undotree
""""""""""""""""""""""""""""""""""""
nnoremap :UndotreeToggle
""""""""""""""""""""""""""""""""""""
"fzf
"unix:
"sudo apt-get install silversearcher-ag
"sudo apt-get install ripgrep
"windows powershell 管理员权限(ag需要代理):
"choco install ag
"choco install ripgrep
""""""""""""""""""""""""""""""""""""
nnoremap f :Files
nnoremap a :Ag
":Files [PATH] Files (runs $FZF_DEFAULT_COMMAND if defined)
":GFiles [OPTS] Git files (git ls-files)
":GFiles? Git files (git status)
":Buffers Open buffers
":Colors Color schemes
":Ag [PATTERN] ag search result (ALT-A to select all, ALT-D to deselect all)
":Rg [PATTERN] rg search result (ALT-A to select all, ALT-D to deselect all)
":Lines [QUERY] Lines in loaded buffers
":BLines [QUERY] Lines in the current buffer
":Tags [QUERY] Tags in the project (ctags -R)
":BTags [QUERY] Tags in the current buffer
":Marks Marks
":Windows Windows
":Locate PATTERN locate command output
":History v:oldfiles and open buffers
":History: Command history
":History/ Search history
":Snippets Snippets (UltiSnips)
":Commits Git commits (requires fugitive.vim)
":BCommits Git commits for the current buffer; visual-select lines to track changes in the range
":Commands Commands
":Maps Normal mode mappings
":Helptags Help tags 1
":Filetypes File types
""""""""""""""""""""""""""""""""""""
"vim-table-mode
""""""""""""""""""""""""""""""""""""
"从第二行开始按两个|则生成横线,之后每次按|则格式化
"设置焦点为竖线,而非十字线
let g:table_mode_corner='|'
"|-----------------|--------------------------|------------|
"| name | address | phone |
"|-----------------|--------------------------|------------|
"| John Adams | 1600 Pennsylvania Avenue | 0123456789 |
"|-----------------|--------------------------|------------|
map tm :TableModeToggle
"Tip: You can use the following to quickly enable / disable table mode in insert mode by using || or __:
function! s:isAtStartOfLine(mapping)
let text_before_cursor = getline('.')[0 : col('.')-1]
let mapping_pattern = '\V' . escape(a:mapping, '\')
let comment_pattern = '\V' . escape(substitute(&l:commentstring, '%s.*$', '', ''), '\')
return (text_before_cursor =~? '^' . ('\v(' . comment_pattern . '\v)?') . '\s*\v' . mapping_pattern . '\v$')
endfunction
inoreabbrev
\ isAtStartOfLine('\|\|') ?
\ ':TableModeEnable' : ''
inoreabbrev __
\ isAtStartOfLine('__') ?
\ ':silent! TableModeDisable' : '__'
""""""""""""""""""""""""""""""""""""
"vim-markdown
""""""""""""""""""""""""""""""""""""
let g:markdown_fenced_languages = ['html', 'python', 'bash=sh']
let g:markdown_minlines = 100
""""""""""""""""""""""""""""""""""""
"iamcco/markdown-preview.nvim
""""""""""""""""""""""""""""""""""""
"nmap MarkdownPreview
"nmap MarkdownPreviewStop
nmap m MarkdownPreviewToggle
" set to 1, nvim will open the preview window after entering the markdown buffer
" default: 0
let g:mkdp_auto_start = 0
" set to 1, the nvim will auto close current preview window when change
" from markdown buffer to another buffer
" default: 1
let g:mkdp_auto_close = 1
" set to 1, the vim will refresh markdown when save the buffer or
" leave from insert mode, default 0 is auto refresh markdown as you edit or
" move the cursor
" default: 0
let g:mkdp_refresh_slow = 0
" set to 1, the MarkdownPreview command can be use for all files,
" by default it can be use in markdown file
" default: 0
let g:mkdp_command_for_global = 0
" set to 1, preview server available to others in your network
" by default, the server listens on localhost (127.0.0.1)
" default: 0
let g:mkdp_open_to_the_world = 0
" use custom IP to open preview page
" useful when you work in remote vim and preview on local browser
" more detail see: https://github.com/iamcco/markdown-preview.nvim/pull/9
" default empty
let g:mkdp_open_ip = ''
" specify browser to open preview page
" for path with space
" valid: `/path/with\ space/xxx`
" invalid: `/path/with\\ space/xxx`
" default: ''
let g:mkdp_browser = ''
" set to 1, echo preview page url in command line when open preview page
" default is 0
let g:mkdp_echo_preview_url = 0
" a custom vim function name to open preview page
" this function will receive url as param
" default is empty
let g:mkdp_browserfunc = ''
" options for markdown render
" mkit: markdown-it options for render
" katex: katex options for math
" uml: markdown-it-plantuml options
" maid: mermaid options
" disable_sync_scroll: if disable sync scroll, default 0
" sync_scroll_type: 'middle', 'top' or 'relative', default value is 'middle'
" middle: mean the cursor position alway show at the middle of the preview page
" top: mean the vim top viewport alway show at the top of the preview page
" relative: mean the cursor position alway show at the relative positon of the preview page
" hide_yaml_meta: if hide yaml metadata, default is 1
" sequence_diagrams: js-sequence-diagrams options
" content_editable: if enable content editable for preview page, default: v:false
" disable_filename: if disable filename header for preview page, default: 0
let g:mkdp_preview_options = {
\ 'mkit': {},
\ 'katex': {},
\ 'uml': {},
\ 'maid': {},
\ 'disable_sync_scroll': 0,
\ 'sync_scroll_type': 'middle',
\ 'hide_yaml_meta': 1,
\ 'sequence_diagrams': {},
\ 'flowchart_diagrams': {},
\ 'content_editable': v:false,
\ 'disable_filename': 0,
\ 'toc': {}
\ }
" use a custom markdown style must be absolute path
" like '/Users/username/markdown.css' or expand('~/markdown.css')
let g:mkdp_markdown_css = ''
" use a custom highlight style must absolute path
" like '/Users/username/highlight.css' or expand('~/highlight.css')
let g:mkdp_highlight_css = ''
" use a custom port to start server or empty for random
let g:mkdp_port = ''
" preview page title
" ${name} will be replace with the file name
let g:mkdp_page_title = '「${name}」'
" recognized filetypes
" these filetypes will have MarkdownPreview... commands
let g:mkdp_filetypes = ['markdown']
" set default theme (dark or light)
" By default the theme is define according to the preferences of the system
let g:mkdp_theme = 'dark'
""""""""""""""""""""""""""""""""""""
"vim-translator
""""""""""""""""""""""""""""""""""""
let g:translator_default_engines=['youdao', 'bing', 'haici']
let g:translator_target_lang='zh'
"" Echo translation in the cmdline
""nmap w Translate
""vmap w TranslateV
"" Display translation in a window
nmap t TranslateW
vmap t TranslateWV
"" Replace the text with translation
""nmap r TranslateR
""vmap r TranslateRV
"" Translate the text in clipboard
""nmap x TranslateX
vim插件管理器中佼佼者:vim-plug
sudo vim /etc/hosts
199.232.28.133 raw.githubusercontent.com
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
vim-plug下载地址访问不了解决方法:直接下载 plug.vim
并放到 vim的 autoload
目录即可 (linux: ~/.vim/autoload/plug.vim
, windows: C:\Users\xxx\vimfiles\autoload\plug.vim
)
:PlugInstall
安装。其他命令参考官文。
借助 github 代理服务器 https://ghproxy.com/ 实现访问 github 下载插件目的。在原有地址前加上 https://ghproxy.com/
即可。
vim ~/.vim/autoload/plug.vim
修改后如下:
修改点1:
let fmt = get(g:, 'plug_url_format', 'https://ghproxy.com/https://git::@github.com/%s.git')
修改点2:
\ '^https://ghprmxy.com/https://git::@github\.com', 'https://ghproxy.com/https://github.com', ''l
vim 插件网站
- vim官方
- vimawesome
- vim插件网
小奶牛 vim-startify
spacevim
配置插件
easymotion
s{char} search character everywhere
w start of words
b start of words backwards
bdw start of words everywhere. The bd stands for bidirectional
e end of words
ge end of words backwards
bdw end of words everywhere
j beginning of lines
k beginning of lines backwards
f{char} find character
F{char} find character backwards
t{char} until character
T{char} until character backwards
vim-sneak
vim-surround
Press cs"' inside
"Hello world!"
to change it to
'Hello world!'
Now press cs' to change it to
Hello world!
To go full circle, press cst" to get
"Hello world!"
To remove the delimiters entirely, press ds".
Hello world!
Now with the cursor on "Hello", press ysiw] (iw is a text object).
[Hello] world!
Let's make that braces and add some space (use } instead of { for no space): cs]{
{ Hello } world!
Now wrap the entire line in parentheses with yssb or yss).
({ Hello } world!)
Revert to the original text: ds{ds)
Hello world!
Emphasize hello: ysiw
Hello world!
VimScript 五分钟入门(翻译)
笨方法学Vimscript、中文译文、w3cschool
sudo apt-get install libncurses5-dev
开箱即用的模块化 Vim IDE
C-a 跳到行首
C-e 跳到行尾
Alt-f 向前(forward)跳一个词
Alt-b 向后(back)跳一个词
C-h 向左删除一个字符
C-d 向右删除一个字符
C-w 向左删除一个词
Alt-d 向右删除一个词
C-u 删除光标左边所有字符
C-k 删除光标右边所有字符
C-L 清屏
history 查看历史命令
!历史命令序号:执行指定历史命令
C-r 进入历史命令查找窗口,输入要查找的命令可快速选择历史命令
C-g 取消历史命令搜索
cd - 将当前目录切换到上一次所在目录
Shift-Insert 粘贴