1. vim配置文件
~/.vimrc使用双引号进行注释,~/.viminfo文件会对一些配置项进行记录。
2. ctags的使用
①. 在你的代码的某个父目录生成tags文件:ctags -R。 ②. 在.vimrc添加: se tag=tags; "自动查找父目录的tags文件 se nocst "直接跳转到定义处 se acd "自动切换工作目录
Mac上xcode的ctags的使用:
ctags *
find `pwd` -type f -exec ctags -adtwf tags {} ;
3. 实用快捷键
*/# 搜索上一个/下一个
n/N 跳转到上一个/下一个搜索
ctrl + ] 跳转到定义处(依赖ctags文件) ctrl + t 跳回调用处(依赖ctags文件) [ + ctrl + i 跳转到声明处 ctrl + i/o 光标前进/回退 g + f 打开文件/路径 g + d 跳到定义处/首次出现的地方 ctrl +g 显示文件总行数 ctrl + p/n 插入上个/下个匹配 ctrl + w 删除光标前的一个单词 ctrl + u 删除当前行所有 ctrl + d/t 行首插入、删除一个缩进 y + i + " 拷贝"xxx"内的内容,i为内,a为包含 y + i + t 光标放到 html tag名字上,将把标签的value复制到剪切板 y + f + t 复制当前行上光标到第一个t之间的所有内容 ctrl+v shift+i Esc Esc 列编辑模式 每行的行首都添加一个字符串:%s/^/要插入的字符串 每行的行尾都添加一个字符串:%s/$/要插入的字符串 ctrl + a/x 数字增/减 g + a 显示10进制、16进制、8进制 g + U/u + w 单词大/小写转换 '0 跳到上次退出的地方 shift + v + U/u 整行转换为大/小写 u 撤销操作 ctrl + r 重做(windows系统是ctrl + y重做,不用搞反了)
关于行尾模式:
① 置于行首 ② 按shift + v ③ 按 a、按 end + i、end + a、按右方向键移动到想要标定的位置 ④ 输入内容 ⑤ esc + esc
以上按右方向键,输入的内容在标定位置整齐排成一列。按 end + a, 输入内容顺序追加到内容末尾。
4. 命令行模式
查看帮助 : help set 查看寄存器 : reg 查看标签 : marks 执行命令 : !sh compile.sh 查看配色方案 : hi
vim的正则: 参考
删除全为空的一行:g#^s*$#d。s同样可以用 代替,同时为了更通用,可以使用posix标准的表达式代替都是ok的,也可以用集合的形式表示。
g就是%s,d就是删除。所以可以用规则的方法代替:%s#^s*$##g
注意sed命令的&的使用技巧。
5. 文件查看
十六进制查看:vim -b filename打开文件然后:%!xxd
二进制查看:%!xxd -r
只有16进制的修改会生效。
补充:
一、vim下显示16进制数据 :%!xxd -g 1 表示每1个字节为1组 :%!xxd -g 2 表示每2个字节为1组(默认) :%!xxd -g 4 表示每4个字节为1组 :%!xxd -r 将vim恢复成原来的显示 man xxd可以获得xxd的帮助文件 二、hexdump显示16进制数据 hexdump可以以16进制形式显示文件内容,比如一个内容为01234567890的文件 记住一个用法即可(-C): hexdump a -C 00000000 30 31 32 33 34 35 36 37 38 39 30 0a |01234567890. | 0000000c 红色部分是对应的16进制 和 ascii码 --> 0x0d 回车符 --> 0x0a 换行符
6. 主题设置
se t_Co=256 " 背景配色方案 hi Normal guifg=#c0c0c0 guibg=#000040 ctermfg=7 ctermbg=black " 行号的显示配色
" hi LineNr ctermfg=214 ctermbg=238
hi LineNr ctermfg=222 ctermbg=238
7. 基本设置
syn on se fdm=indent "代码自动折叠方法 se tag=tags; "ctags 文件 se nu "设置行号 se cul "水平光标 "se cul "垂直光标 se sm "高亮显示括号匹配 se acd "自动切换工作目录 se ts=4 "设置tab的长度为四个空格的长度,编码依然是tab se et "expand tab,将tab从编码上替换为空格键,不影响 < 或 > 缩进的长度 se sts=4 "够tab的长度补tab,不够tab的长度补空格 se sw=4 "shiftwidth 设置 < 或 > 一次缩进为4个空格 se ai "自动缩进 se si "智能缩进 se hls "高亮显示搜索结果 "se ic "忽略大小写 se is se aw se nocst se clipboard=unnamed se wildmode=list:longest "se mouse=a "se mousemode=popup se selectmode=mouse,key "fileencodings "se fencs=utf-8,gbk,utf-16,big5 se helplang=cn se encoding=cp936 se fileencoding=cp936
8. 设置头文件模板
autocmd BufNewFile *.c,*.cc,*.cpp exec ":call SetTemplate()" func SetTemplate() call setline(1,"/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ") call append(line("."), "* Author: Alex") call append(line(".")+1, "* mail: abnk@qq.com") call append(line(".")+2, "* File Type: ".&ff." Name: ".expand("%")) call append(line(".")+3, "* Created Time: ".strftime("%Y-%m-%d %H:%M %S")) " %c call append(line(".")+4, "*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */") if (&filetype == 'cpp' || &filetype == 'cc') call append(line(".")+5, "#include<iostream>") call append(line(".")+6, "using namespace std;") endif if &filetype == 'c' call append(line(".")+5, "#include<stdio.h>") call append(line(".")+6, "#include<stdlib.h>") endif call append(line(".")+7, "int main(int argc,char *argv[],char *env[])") call append(line(".")+8, "{") call append(line(".")+9, " ") call append(line(".")+10, " return 0;") call append(line(".")+11,"}") autocmd BufNewFile * normal G endfunc
9. 设置状态栏
"显示行号,列号 "se stl+=%1* %l%* "hi User1 cterm=bold ctermfg=130 ctermbg=0 "显示文件浏览百分比 se stl+=%2* %P %* hi User2 cterm=bold ctermfg=9 ctermbg=121 "显示文件名 se stl+=%3* %f %* hi User3 cterm=none ctermfg=red ctermbg=256 se stl+=%< se stl+=%5* %* hi User5 cterm=none ctermfg=0 ctermbg=0 se stl+=%= "显示文件编码类型 se stl+=%6* %{"".(&fenc==""?&enc:&fenc).((exists("+bomb") && &bomb)?",B":"").""} %* hi User6 cterm=bold ctermfg=172 ctermbg=256 "显示系统时间 se stl+=%9*%{strftime("%m.%d")}%* hi User9 cterm=bold ctermfg=6 ctermbg=242 "gray se stl+=%5* %* se stl+=%7* %{strftime("%H:%M")} %* hi User7 cterm=bold ctermfg=1 ctermbg=34 se ls=2
10. 颜色对照表
11. vim中文参考文档
http://vimcdoc.sourceforge.net
12. 补充技巧
在.vimrc中添加上这一行:
iab xtime <c-r>=strftime("Alex %Y-%m-%d %H:%M:%S")<cr>
然后输入xtime即可插入作者、时间。xtime可以换成其它的。
实际上,这就是缩写:https://blog.csdn.net/lalor/article/details/7288553
搜索与修改技巧:https://www.cnblogs.com/ifantastic/p/3826433.html
13. 空格和Tab的替换
https://www.jianshu.com/p/926eff5b9def
14. 我的简洁配置
se nu
se si se sw=4 "按==或>>后缩进为4 se st=4 se sts=4 se et se tag=tags; se nocst se acd
se hls "高亮搜索
ts和et联用就是替换tab键。
# 打开到上次退出的地方。快捷键'0代替,或者 ctrl + o 回退光标 if has("autocmd") autocmd BufReadPost * if line("'"") > 0 && line("'"") <= line("$") | exe "normal g`"" | endif endif
15. 常用操作
① 查看文本中所有的tab和空格
se list
② 将tab替换为4个空格
:set ts=4 :set expandtab :%retab! "加!是用于处理非空白字符之后的TAB,即所有的TAB,若不加!,则只处理行首的TAB
16. MacOS安装ctags
使用代理:参考
brew install ctags -exuberant
17. 一种获取函数签名的方法
ctags --languages=c -R * egrep -o "^[^$]+)" tags egrep -o "^[^$]+);" tags #单纯获取声明
以上,没有搜到头文件的函数声明,还是比较靠谱的。如此,便可以辅助快速将一个较大的项目转换成cpp的项目了。
其它:
nm ' [TW] ' ./obj | grep func_name