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 显示系统全部书签