# vim_flow **Repository Path**: yangzifb/vim_flow ## Basic Information - **Project Name**: vim_flow - **Description**: vim配置 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-25 - **Last Updated**: 2024-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README vim_flow ========== vim工作流,使用vim、bash构建便携式文本编辑工作流,工作流支持windows下gvim、和linux下的vim\neovim包括配置文件、插件、依赖库以及对特定问题的解决方式,可实现便携式运行,windows下无需安装,linux下可不干扰原有配置。
对于windows,实现便携式部署的方式是将gvim.exe放置在vim需要的配置文件环境中(vim80和vimfiles) 对于linux,通过在~/bin下创建mvim脚本的链接vif来实现不干扰其他用户的部署。mvim脚本中首先改写$HOME使vim和bash的配置文件在局部生效。 ## 文件组织: ```text ext_exe: windows下存放直接可执行的文件(插件需要的) vim_flow: 根目录,存gvim.exe vim80: 基本插件 vimfilse: 扩展插件 配置脚本 ``` ## 脚本列表: 一个便携脚本: mvim:在执行depvimrc时生成 一个部署脚本: depvimrc vim脚本: ```text _gvimrc: gvim使用的额外配置 _vimrc_pl: 插件的配置 _vimnp: 无插件版本 _vimp: 部署用, ->_vimnp,->_vimrc_pl _bashrc: bash的配置文件 ``` ## 部署: vim的执行文件只要放在vim文件夹下,运行时就能访问到vimfiles里的插件 1、在windows下部署: 直接为目录下的gvim.exe添加关联即可 2、在linux下部署: 可以使用./depvimrc np或者pl或者m来选择部署的类型 对于便携式(m)部署,使用vif命令来执行 ## vi工作流的插件: 一般代码工具: ```text 1、snipMate 代码提示和一般代码段录入 2、AutoComplPop 自动补全 3、rainbow_parentheses 让括号带不同的颜色 添加启动触发 4、multiple_cursors 类似sublime的多个单词选择操作 5、bufexplorer 文件管理器 6、NERD_tree 文件管理器 7、minibufexpl 文件管理器,在与NERD配合的时候,在一个文件夹内启动vim,切换到另一个文件夹打开文件会出现bug,minibufer窗体出现在上半个屏幕且没有内容 需要修改源代码: 将所有的 != '-MiniBufExplorer-' 改为 !~ '-MiniBufExplorer-' == '-MiniBufExplorer-' 改为 =~ '-MiniBufExplorer-' 8、conque_term: 在vim中打开shell 为了在shell中不做代码提示,并加入行号,在autoload/conque_term.vim中: 搜索并注释conque_term#set_buffer_settings函数中的:setlocal nonumber 在函数 conque_term#on_focus 中: "让acp失效 if exists('g:loaded_autoload_acp') try call acp#lock() catch echo 'on_focus' endtry endif 在函数 conque_term#on_blur 中: "让acp失效 if exists('g:loaded_autoload_acp') try call acp#unlock() catch echo 'on_blur' endtry endif 9、SrcExpl: 利用ctags进行代码查看 为了让SrcExpl的窗口小,不占用窗口行数,修改源代码,使其窗口出现在本窗口的下方: (1)为使窗口出现在当前窗口的下方,而不是永远在所有窗口下方,在srcexpl.vim中:585行左右: exe 'silent! rightbelow ' . string(g:SrcExpl_winHeight) . 'split ' . a:wincmd (2)原来代码中直接获取最后一个窗口就能得到打开的窗口,现在需要获得刚刚打开的窗口: "需要获取最新打开的窗口 "let srcexpl_win = winnr("$") let srcexpl_win = winnr() (3)原来代码中初始化时首先找到第一个编辑窗口,而不是当前窗口,这里需要改为当前窗口。 只需注释掉1473行,不切换窗口即可: "silent! exe l:tmp . "wincmd w" (4)发现此脚本生成ctags的时候会修改工作目录,将此功能去除,注释309行: "silent! exe "cd " . expand('%:p:h') 1479行的 " exe "set autochdir" 一定要去掉 (5)直接映射跳转键,使用原代码机制出错: 1580行,SrcExpl_Toggle函数内 SrcExpl_WinEnter函数直接return (6)跳转时,文件名bug(后改出来的) 1162行,SrcExpl_ViewOneDef函数内: call SrcExpl_WinEdit(fnamemodify(tagfiles()[0],':p:h'). '/' . a:fpath) 代替原有判断 (6)同时需要在脚本中做如下修改: let g:SrcExpl_pluginList = [ \ "__Tag_List__", \ "_NERD_tree_" \ ] nmap t :SrcExplToggle let g:SrcExpl_winHeight = 6 let g:SrcExpl_gobackKey = "b" let g:SrcExpl_refreshTime = 500 ``` C++开发: ```text clang_complete 代码补全(一般禁止) 有时候会报找不到buildin include文件夹,可以在libclang.py文件中注释掉相关print语句, 第95行的if 需要使用clang,windows需要下载libclang.dll,linux需要安装clang,并修改so的软连接 配置: libclang的路径 部分使能 ``` bash的配置:在.bashrc中 ## 自定义配置 ### 配置设计 首先通过简化光标移动和字符编辑功能,让vim编辑速度达到使用鼠标的程度。 光标移动主要是在双手不离开asdf、jkl;大体位置的条件下,实现home\end\pageup\pagedown\up\donw\left\right功能;实现在行首行尾插入功能、找到特定字母、按单词前进后退、重复跳跃、查找、设置书签、按大括号移动、让屏幕移动到以当前行为中心、精确定位行等 字符编辑主要是原位修改、单词替换、块选择、复制粘贴、删除行移动行、重复操作、撤销重做、替换、注释等功能 在此基础上,通过vim特有的扩展功能让编辑效率高于鼠标,不可替代:多文件查找替换功能;完全使用键盘利于宏的发挥;json格式化;增加多窗口开关移动速度提高文字编辑复制粘贴效率;与文件管理器紧密结合;内嵌shell,实现命令编辑、结果文字编辑与查询;diff功能;多文件脚本话的宏; 在快捷键设计上,尽量降低ctrl的使用,降低左手小拇指疲劳,改用alt和space;由于alt在终端上需要配置才能用,个别键与原有快捷键冲突,所以除移动等最常用需要组合键的功能外,常用功能都使用space连按组合键实现;一般功能使用f功能键连按组合实现 ### 配置 * 显示行号 * table长度为4 * 不用空格代替tab * 增量搜索 * 高亮搜索 * 搜索时忽略大小写 * 显示tab为: * 无备份和交换文件 * 编码为utf8 * 设置当文件被改动时自动载入 * 修改状态栏 * 按键超时时间500ms ### 快捷键 ```text * 编译: F7 * 移动两行: * 在插入模式行中间插入新行: * CTRL-C 复制,CTRL-V 粘贴 CTRL-S保存 * * * jj推出 * 查找定义和后退: gy,gb * 代替ctrl+r访问寄存器: * 粘贴功能,alt+0、1、'、p访问对应寄存器 * 停止高亮: ; * 查看当前路径:c * 宏放映: q * 行内移动,到行首和行尾: h,l * 替换当前单词:s * 在目录中查找: f * 插入日期时间: d * 开diff模式: t * 更新diff窗口:u * 选择{块的首部和选择整个块: o,p * 保存所有,退出,退出不保存:aw,aa,aq * 复制当前行并注释原来的行:y * 查看刚才查找的个数:n * 替换: h * 重新加载: * 粘贴模式:p * wrap: w * 将文本变成hex字符:h * 设置当前buf是否显示二进制: b * json格式化,可视化,紧凑:j,m * 打开文件查看器:w,b,m * ```