vim
vim for PHP: The Complete Guide for a Powerful PHP IDE
如何在 Linux 下利用 Vim 搭建 C/C++ 开发环境
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
快捷键一览: 选项 快捷键 说明 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创建一个锚点
: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
--- LaTeX
LaTeX 入门小记:Vim + Vimtex + LaTeX 初体验
https://zhuanlan.zhihu.com/p/66534269
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>
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 
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
编译与调试
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 			显示系统全部书签