资源说明:vim personal config
set vim: ft=help see the vim info vim --version golang vim 补全 需要设置 gocode gocode set 文件树架构 1.首先vim执行plugin 中的所有脚本,主要是定义一些全局变量,和函数。 2.在到ftplugin中执行匹配文件类型的脚本, 3.在indent/中设置相关的缩进 4.执行.vimrc 最佳实践 --------------------------------- * 把每天都要重复的按键映射为key * 把CapsLock 和esc交换 ubuntu 自带的改建软件就可以改, vim无法表示CapsLock * 在指定位置插入字符 k e.G. sdsadb sdsooo 变为 sds_adb sds_ooo * gi effect edit jump to last edited point and enter insert-mode Qus. ----------------------------- 1. 如何比较转义字符 察看按键的表示 h keycode 1 read 2 autocmd 自动命令 3 source 读取一个文件中的Ex命令 4 autocmd-events 在一个文件中设定vim 设置 ------------------------------- set vim: opt1=val1:opt2=val2[:....] "specal words删除光标前的字符 删除光标后的字符 "自动补全 words set complete+=k " scan the files given with the 'dictionary' option C-P: previous-match C-N: next-match C-X C-F match in file-name complet 定制补全策略 * message echom EE 把Ex命令输出到文本中 insert 模式下C-r: 可以输出最近一次的Ex命令 从 normal进入 Ex模式 Q 离开 :vi EE vtx 从光标位置开始选中直到字母x dtx EE C-r = 0 1 2 3 4 kkk EE :reg 输出寄存器内容 "2p 粘贴2这个reg中的内容 VIMScript Programming ============================================= vimscript 是一种动态强类型脚本语言 vimscript 中所有的语句都一\n 结尾 如果要使用多行用使用反斜杠 通过使用| 可以把多个exp放到一行中 变量 {{{ ------------------------------------ + 变量赋值 使用 *let* 关键字来进行变量赋值 let name = value 想要察看当前定义的所有变量 使用 :let 命令 + 删除变量 使用 *unlet* 关键字来删除变量 unlet var 使用 unlet! var 删除变量时如果变量不存在不会报错 e.g. 删除所有的s:变量 > for k in keys(s:) unlet s:[k] endfor > + 变量类型 * string 对可以转化成int的转换为int “123” 其他的为0 slicing str[begin: last] * list: 使用方括号包围的有序列表 index 从0开始 e.g. let li = [1,2,3,4] li[index] index 可以是负数 -1 = last-element slicing li[begin : last] concatenation list1 + list2 list-functions add(list, value ) like push_back in C++ len(list) -> element-counts get(list, index, default-value) 返回指定index的值如果index无效返回 default-value count(List, item) -> item count index(list, value) -> index 如果没有value返回-1 join(list, str::string()) -> string() 把list中每个元素使用str链接起来 split(string, signl) -> list() join 的逆操作 reverse(list) ... more see *list-function* * dictionary : 使用花括号包围的无须集合 k:v * e.g. let di = {'name':'li', 'home':321} 一个变量的类型是第一个赋值时值的类型,变量类型一旦分配后 不会改变 + 变量作用域 vimscript 的变量作用域(可见范围)和一般的编程语言不同,它是根据 编辑器对象来设定的。 默认情况下,变量如果在函数内部定义则在函数内部可见, 如果在函数外部定义则是全局变量 通过在变量名的开头添加前缀 显式定义不同作用域的变量 + 全局可见 |g|:var + 变量所在的脚本可见 |s|:var s: 变量不会随着script的执行完成而free, 下次在执行script 是s:变量还是上回的值 + vim预定义变量 |v|:var + 变量在当前函数中可见 |l|:var + 变量是当前函数的一个参数 |a|:var 常用来在函数中取得函数的参数 + 伪变量(特殊变量) * &name 获得vim选项值 e.g. let xx=&path &l:op localoption * @name 获得vim寄存器中的值 * $name 环境变量 e.g. let spath=$PATH + string 变量 string 拼接 使用 . e.g. let s:var = "hello " . "worlds " . s:str *empty(str)* string 判空 !str *strtrans(str)* 把string中的不可打印字符转行成可打印字符 *strlen* (str, beign, [end]) begin index 从0 开始 * let & set 使用set时 name为 vim op let 可以对任何变量赋值包括 vim op 但是要使用 &op 来指名op 是vim op set textwidth=v let &textwidth = &textwidth + 10 }}} set ------------------------ * boolean option open setclose set no * checking boptions set ? condition {{{ * if int elseif endif condition 会求int类型值, 0 = false, other=true if 的condition 必须在同一行,否则会报错 * == VIMScript 中比较始终执行数字比较, 除非两个对象都是 string 如果 一个是string 一个是num 那么string将会被转化为数字在比较 == string的比较依赖于用户的设定 大小写敏感 * ==? case-insensitive * ==# case-sensitive }}} 函数 {{{ ------------------------------------- * calling Functions call func * return 如果vim不返回一个值则,隐士的返回0 * param 使用a:name vim 不允许在function中改变arugment 的值 |expand|(x,y) 得到指定的string e.g. 到的当前文件的名字 expand('%') e.g. 到的当前文件的目录 expand('%:h) e.g. 到的当前文件的扩展名 expand('%:e) |executable|('name') 坚持name是否是可执行文件 }}} |getline|/1-2 得到指定的行内容 得到当前行 getlien(".") 得到1-3行 getlien(1,3) -> list() 返回一个list,每个元素是一行内容 |setline|/2(len, text) 设置指定行的内容 当text为list的适合会把每个elemt 当作一行 设置当前行内容为 hellC setlien(".", 'hello' call setline('.', getline('.')[:-2]) [:-2] 的意思是 得到getlien返回的string 的子串 返回从开始到倒数第二个(包含)的子串 see 负数表示从end开始计数 [begin:end] e.g. 返回234 '12345'[1:-2] |line| 得到光标,window等的所在行数 |col|('.') 得到当前光标的为位置 执行 vim脚步 :source filename 自定义命令 -------------------------------------- 使用 command 来定义一个命令 e.g. > ```vimL command LinuxKernelMode call KernelMode() function KernelMode() let l:kernel_release = system('uname -r') echo l:kernel_release endfunction ``` 如果不想显示后面的调用命令 可以添加 silent command LinuxKernelMode silent call KernelMode() |execute| 执行一个string execute "echo hello" " set cmd set setlocal setl vim Plugin Layout --------------------------------------- * color/ * plugin/ each be run once every time Vim starts These files are meant to contain code that you always want loaded whenever you star Vim * ftdetect/ be run once every time Vim start use to set up autocommands that detect file type * ftplugin/ 每次 Vim set buffer filetype run filetype.vim in file will be set buffer-local options * after/ will be load every vim starts, but after plugin/ * autoload/ 会延迟加载 plugin 的时间 Custorm Plguin ---------------------------------- * vim-javascrpt [[for JS]] provides syntax and indent * vim-nodejs-complete * 使用 doctorgjs 来生产js的tags Diff -------------------------- ★ 跳转到下一个diff点: 请使用 ]c 命令 ★ 跳转到前一个diff点: 请使用 [c 命令 dp (diff put) 吧当前window的内容复制到另一个window do (diff obtain) 吧另一个window的内容复制到当前window 和 dp 方向放 diffupdate 重新比较 listchars Map ------------------------------------ map Key Cmd 如果不想显示Cmd可以在 map 的后面添加 , 这样就不会显示 Cmd e.g. map :/Hee 编辑函数 ----------------------------- read, delete append Auto Complete -------------------------------------- vim 提供多种补全形式 x n/p 补全的相关设置 complete fesf esf ^ vim help :h[elp] 用双引号扩起来的是 vim 的设置选项 move CRTL-E scroll down one line CRTL_Y scroll up one line 0 go to the starting of current line $ go to the end of current line ^ go to the first non black char of current line g_ redraw screen with current line to top z to middle z. to bottom z- in insert mode move a world SHIFT- right word-by-word SHIFT- right word-by-word jumps marks 跳转到一个mark `a 是准确跳转到 mark a的地方 'a 是跳转到a所在的行的开头 ` 几个特殊的marks vim自己维护 " 在退出之前最后编辑的 [ ] < Visual 模式下的第一行 > Visual 模式下的最后一行 . 最后改动的地方 ^ 最后离开插入模式的地方 man K man(3) 3K 自定义man page lookup set keywordprg=perldoc\ -f for perldoc \ 是用来转义空格 insert mode special key CTRL-O insert mode execute a single vim command CTRL-H == del CTRL-W == del word <- CTRL-J == CTRL-M begin new linhe CTRL-R insert reg CTRL-T add a shift > CTRL-D del a shif CTRL-G j down line CTRL-G k up line normal dk dl dj dh show ascii value of cursor ga quickfix errorformat # cexpr system(cmd) # 用system(cmd) 执行的接过来打开一个quick-fix recorver vim -r dos unix set ff= ## sign 用来做语法错误提示或者debugger 断点指示 要定义一个 sign 然后显示他 sign list 列出所有的 sign ruby crash ----------------------------- 保证编译vim是用的ruby版本和 编译 command-t ruby 版本相同 :ruby puts RUBY_VERSION + path 用来gf 跳转的文件,的搜索路径 + 'suffixesadd' 自动补齐后缀 比如lua require(xxx) 是不写.lua后缀的,导致df 无法查找,但是设置suffixesadd 后接可以
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。