vim

Resource | vim plugin search

Resource

vim tips 1600+

vim for PHP: The Complete Guide for a Powerful PHP IDE

如何在 Linux 下利用 Vim 搭建 C/C++ 开发环境

Vim 8 中 C/C++ 符号索引:GTags 篇

Vim查找替换及正则表达式的使用


let g:gutentags_trace = 1

let g:gutentags_ctags_exclude = [
      \ '*.git', '*.svg', '*.hg',
      \ '*/tests/*',
      \ 'build',
      \ 'dist',
      \ '*sites/*/files/*',
      \ 'bin',
      \ 'node_modules',
      \ 'bower_components',
      \ 'cache',
      \ 'compiled',
      \ 'docs',
      \ 'example',
      \ 'bundle',
      \ 'vendor',
      \ '*.md',
      \ '*-lock.json',
      \ '*.lock',
      \ '*bundle*.js',
      \ '*build*.js',
      \ '.*rc*',
      \ '*.json',
      \ '*.min.*',
      \ '*.map',
      \ '*.bak',
      \ '*.zip',
      \ '*.pyc',
      \ '*.class',
      \ '*.sln',
      \ '*.Master',
      \ '*.csproj',
      \ '*.tmp',
      \ '*.csproj.user',
      \ '*.cache',
      \ '*.pdb',
      \ 'tags*',
      \ 'cscope.*',
      \ '*.css',
      \ '*.less',
      \ '*.scss',
      \ '*.exe', '*.dll',
      \ '*.mp3', '*.ogg', '*.flac',
      \ '*.swp', '*.swo',
      \ '*.bmp', '*.gif', '*.ico', '*.jpg', '*.png',
      \ '*.rar', '*.zip', '*.tar', '*.tar.gz', '*.tar.xz', '*.tar.bz2',
      \ '*.pdf', '*.doc', '*.docx', '*.ppt', '*.pptx',
      \ ]
比较好的vim配置,如spacevim,spf13,space-vim等等。
neovim相对vim有增加了很多新特性,舍去了很多没用的特性
我的编程习惯是写代码用neovim
https://github.com/SpaceVim/SpaceVim


安装
Linux 或 Mac:
curl -sLf https://spacevim.org/cn/install.sh | bash

想要获取更多的自定义的安装方式,请参考:
curl -sLf https://spacevim.org/cn/install.sh | bash -s -- -h

Windows:
window 下最快捷的安装方法是下载安装脚本 install.cmd 并运行。
https://spacevim.org/cn/install.cmd

Emmet-vim - Vim HTML增强插件

Emmet.vim 教程

快捷键一览:

选项	快捷键	说明
1. Expand abbreviation	<C-y>,	展开缩写
2. Expand word	<C-y>;	展开一个词
3. Update tag	<C-y>u	更新标签
4. Wrap with abbreviation	v_<C-y>,	用缩写包装(可视模式)
5. Balance tag inward	<C-y>d	选中标签
7. Go to next edit point	<C-y>n	下一个编辑点
8. Go to previous edit point	<C-y>N	上一个编辑点
10. Merge lines	<C-y>m	合并多行到一行
11. Remove tag	<C-y>k	删除标签
12. Split/join tag	<C-y>j	闭合标签/展开标签
13. Toggle comment	<C-y>/	注释/解注标签
14. Make anchor from URL	<C-y>a	根据URL创建一个锚点

ultisnips snipmate升级版

:UltiSnipsEdit! 

" ultisnips
" Trigger configuration. Do not use <tab> if you use YCM.
let g:UltiSnipsExpandTrigger="<c-t>"
let g:UltiSnipsJumpForwardTrigger="<c-f>"
let g:UltiSnipsJumpBackwardTrigger="<c-b>"

" If you want :UltiSnipsEdit to split your window.
let g:UltiSnipsEditSplit="vertical"
" UltiSnipsEdit! edit current filetype snips

VSCodeVim/Vim

vim-javacomplete2

modern finder

stable-windows

--- LaTeX

使用Vim写LaTex代码

MathJax与LaTex公式简介

LaTeX 入门小记:Vim + Vimtex + LaTeX 初体验

miktex下载

一份其实很短的 LaTeX 入门文档

https://zhuanlan.zhihu.com/p/66534269


用 vimwiki 搭建你自己的维基世界

vim 折叠的用法

set foldenable
set nofoldenable

zR  全部展开
zD  删除全部折叠
zc  折叠
zC  对所在范围内所有嵌套的折叠点进行折叠
zo  展开折叠
zO  对所在范围内所有嵌套的折叠点展开
[z  到当前打开的折叠的开始处。
]z  到当前打开的折叠的末尾处。
zj  向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk  向上移动到前一折叠的结束处。关闭的折叠也被计入。

目录

2019-07-22

command

二进制文件 (binary file)
vim可以显示,编辑2进位文件
:vim -b datafile 
:%!xxd 		-> 更改当前文件显示为2进位
:%!xxd -r 	-> 更改二进位为text格式

vis 选中一个句子
vib 选中一个block
viw 选中一个单词
vip 选中一个段落
) :光标移至句尾
( :光标移至句首
{:光标移至段落开头
}:光标移至段落结尾

四个特殊的书签:
'     The cursor position before doing a jump
"     The cursor position when last editing the file
[     Start of the last change
]     End of the last change
.     last edit position

]] 向前找{
][ 向后找}

'. 移动光标到上一次的修改行.
`. 移动光标到上一次的修改点.
.  重复执行上一次的修改动作
;  继续查找

'' 找到某个单词后, 再输入此命令则回到上次停留的位置.
`` 恢复

CTRL-O  jumps to older positions 
CTRL-I  jumps back to newer positions

2018-06-15

补全和跳转

ctrl+x ctrl+o(智能补全)
或ctrl + n 或ctrl+p ,
或是 ctrl+x ctrl+f(补全文件名)

跳转:
生成了tags文件
跳转到函数、全局结构、全局变量等tag: 组合键 ctrl_]
从tag处返回跳转的位置:组合键 ctrl_t
跳转到全局变量处: 快捷键 gD
跳转到局部变量处: 快捷键 gd
返回到上一个操作位置(上一次光标位置): 组合键 ctrl_o
返回到下一个操作位置(更新的光标位置): 组合键 ctrl_i

tab

:tabnew [++opt选项] [+cmd] 文件            建立对指定文件新的tab
:tabc       关闭当前的tab
:tabo       关闭所有其他的tab
:tabs       查看所有打开的tab
:tabp      前一个
:tabn      后一个

标准模式下:
gt , gT 可以直接在tab之间切换。
alt+数字   tab间切换
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
    exec "w"
    if &filetype == 'c'
        exec "!gcc % -o %<"
        exec "!time ./%<"
    elseif &filetype == 'cpp'
        exec "!g++ % -o %<"
        exec "!time ./%<"
    elseif &filetype == 'java' 
        exec "!javac %" 
        exec "!time java %<"
    elseif &filetype == 'cs'
        exec "!mcs %"
        exec "!time mono %<.exe"
    elseif &filetype == 'python'
        exec "!python3 %"
    endif
endfunc

vimwiki

\%toc table of content
\%template main.tpl
\%title
\%nohtml

\w\w    创建当天的日记
\wd     删除wiki文件
\wr     重命名文件,自动修改相关链接

在template/default.tpl添加代码来使用 Disqus 评论系统

支持公式显示:
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

Learn Vimscript the Hard Way

VIM演示和文章

gvim 64位下载

spf13-vim - Vim编辑器的终极版本

nerdtree-git-plugin|NERDTree git插件

2018-06-15

command

:res+5          resize window height 
:vert res+5     resize window width

:g/test/s/abc/123/          查找有test的行,替换abc为123
/^\<                        匹配行首单词头
/[^a-z\t\s]                 匹配非字符非空格和非TAB
%s/^\(\w\+\t\)/\1|/g        在行首字符串空格后加|, 多个字符\w\t,用()带参数

2017-10-23

function! s:get_visual_selection()
    " Why is this not a built-in Vim script function?!
    let [line_start, column_start] = getpos("'<")[1:2]
    let [line_end, column_end] = getpos("'>")[1:2]
    let lines = getline(line_start, line_end)
    if len(lines) == 0
        return ''
    endif
    let lines[-1] = lines[-1][: column_end - (&selection == 'inclusive' ? 1 : 2)]
    let lines[0] = lines[0][column_start - 1:]
    return join(lines, "\n")
endfunction

autocmd

autocmd FileType         java   source ~/.vim/files/jcommenter.vim
     以上两条命令让我在打开 java 文件时才应用后面提到的两个配置文件.
autocmd BufNewFile       *.java   0r ~/.vim/files/skeletons/java.skel
     以上这条命令让我在新建 java 文件时自动加入 java.skel 文件的内容.
autocmd FileType java,c,cpp,cs vmap <C-o> <ESC>'<o 
autocmd FileType html,text,php,vim,c setlocal textwidth=100 

vim-fugitive(含演示视频)

FuzzyFinder

:BufFile
:BufDir
:BufMruFile
:BufMruCmd
在vimrc中配置如下快捷键:
<leader>ff :FufFile<CR> 
<leader>fb :FufBuffer<CR> 
Ctrl-n , Ctrl-p上下选择项目

Ctrl-j开启该档案到水平分割视窗
Ctrl-k开启该档案到垂直分割视窗
Ctrl-l开启档案至新分页

Ctrl-\ Ctrl-\ 切换搜寻模式( fuzzy matching 或partial matching )

跳转

NerdTree快捷键:
K       跳到当前目录下同级的第一个结点
J       跳到当前目录下同级的最后一个结点
ctrl+k  跳转到同级上一个节点
ctrl+j  跳转到同级下一个节点

光标移动到屏幕的上下或中部:H L M

ctrl-u/d   scroll up or down
zz 让光标所在的行居屏幕中央 
zt 让光标所在的行居屏幕最上一行 t=top 
zb 让光标所在的行居屏幕最下一行 b=bottom
(10z 将第10行滚动的顶部)

注释

NERD-Commenter:
\cc     加注释
\cn
\cu     取消注释
\cm     用/**/注释
\cs     在行外用/**/注释
\ci     注释切换
\c$     从当前注释到行尾
\cA     在行尾注释

数据库dbext

dbext.vim:
:DBSetOption user|passwd|dsnname|srvname|dbname|host|port|...=<value>
:DBSetOption user=root:passwd=root:dbname=survey
:Select * from survey

\se  执行当前行,或可视模式选中的语句
\sE  topX
\st  光标下的table名
\sT  光标下的table名,并设置前多少行
\sdt desc tablename
\slt show tables;
\slv show views
\sbp 切换database

snipmate

php
/*
ec
def def?
inc inc1
req req1
$_
fun
class
for
foreach
do
if ife else elseif t
switch case 
doc_c doc_f doc_h doc_i (interface)
array

排序

3,$sort n		//按数字排序,从第3行到行尾
%sort!			//倒排
%sort u			//去掉重复行
%sort i			//忽略大小写
:sort /.*\%2v/  //按第2列排序

撤销/重做

u -> undo
CTRL-r -> redo
:undo 2 -> undo 到结构的2层 (undo to tree 2)
:undolist -> 显示所有的undo列表 (show undo list)
:earlier 10s -> undo到10秒前的编辑 (undo to 10 seconds ago)
:earlier 10h -> undo到10小时前的编辑 (back to 10 hours ago)
:earlier 1m -> undo到1分钟前 (back to 1 minutes ago)

文件编码

:set fileencodings=ucs-bom,utf-8,cp936      打开文件时适应的编码
:set fileencoding=utf-8                     保存文件时的编辑

encoding(enc):encoding是Vim的内部使用编码,encoding的设置会影响Vim内部的Buffer、消息文字等。
在Unix环境下,encoding的默认设置等于locale;
Windows环境下会和当前代码页相同。在中文Windows环境下encoding的默认设置是cp936(GBK)。 

:X 文件加密,解密用空密码(注意大写)
vim -x filename

输入特殊字符
CTRL-v 编码就可以了
例如 CTRL-v 273  ---->  ? 得到 ?

二进制文件 (binary file)
vim可以显示,编辑2进位文件
:vim -b datafile 
:%!xxd 		-> 更改当前文件显示为2进位
:%!xxd -r 	-> 更改二进位为text格式

Command

普通模式输入
:!ctags -R
普通模式下输入
:ta func_name
就可以直接将光标定位到func_name函数处

gD	跳转到局部变量的定义处

( [count] sentences backward
) [count] sentences forward
{ [count] paragraphs backward
} [count] paragraphs forward
[[	跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)

%	跳转到配对的括号去
''	跳转到光标上次停靠的地方, 是两个', 而不是一个"
`,	跳转到上次编辑的位置
`'

:r[ead] [name] Insert the file [name] below the cursor.
:r[ead] !{cmd} Execute {cmd} and insert its standard output below the cursor.

:r! ls

:sh 	转到shell, exit退回vim

下载配置及编译VIM

编译与调试

exec "make"
exec "copen"
打开quickfix窗口
:cc     显示详细错误信息
:cp     跳到上一个错误
:cn     跳到下一个错误
:cl      列出所有错误
:cw     如果有错误列表,则打开quickfix窗口,没有则什么也不错
:copen 打开quickfix窗口,可以在后面添加窗口高度参数,如10行: :copen 10
:cclose 关闭quickfix窗口
:col     到前一个旧的错误列表
:cnew  到后一个较新的错误列表

录制宏

qx 开始录制
q  停止录制
10@x 重复10次
:reg 查看宏
"ap  输出宏
let @a = "v$^Mo^[j"  定义宏

Ctrl+a	Increment number under the cursor
Ctrl+x	Decrement number under cursor

vim插入模式下的快捷操作

CTRL+D 减少缩进 
CTRL+T 增加缩进 
<CTRL+R> {0-9a-z"%#*:=}能够插入剪贴板的内容
<Shift+Left>或<Ctrl+Left> 光标左移一个单词 
<Shift+Right>或<Ctrl+Right> 光标右移一个单词 
CTRL+W 删除光标左侧的单词
CTRL+U 删除光标左侧的行
<ctrl+o>:reg	查看剪切板
<ctrl+o>:sh

Command

批量删除
:g/string/d	Delete all lines containing string
:v/string/d	Delete all lines containing which didn’t contain string

g/test/s/aaa/bbb/ 在文中查找包含test的行,并且把该行中的aaa替换成bbb,也可以把aaa省略,
g/test/s//bbb/,这时候表示的是把test替换成bbb指令

---Visual模式下的替换---
music amuse fuse refuse
wvee  ESC
:s/\%Vus/az/g
ctrl-Q --> to select --> ESC
:%s/\%Vold/NEW/g
/\%Vgreen


块操作: <C-v> windows中用<C-q>

<C+X><C+O>	自动补全

<C-f> <C-b> forward backward
<C-u> <C-d> up down
zz 让光标所在的行居屏幕中央 
zt 让光标所在的行居屏幕最上一行 t=top 
zb 让光标所在的行居屏幕最下一行 b=bottom
(10z 将第10行滚动的顶部)

:1,10 d		删除1-10行
:1,10 co 20	将1-10行复制到20行下
:1,10 m 20	将1-10行移动到20行下

:1,10 w!a.txt	将1-10行写到文件a.txt
:r!dir 			将command写到当前行

10G 移到10行首
10$ 移到10行尾
10+ 下移10行
10- 上移10行

设置窗口大小:
set lines=35 columns=118

标签

m[a-z]
m[A-Z] 			全局标签
'{a-zA-Z}		跳转到书签
:delm {marks} 	删除一个书签:delm a
:delm !			删除全部书签 (delete all marks)
:marks 			显示系统全部书签