From 23aa147923e7a6251db6ee4980c075394d17b85c Mon Sep 17 00:00:00 2001 From: veypi Date: Fri, 26 Jun 2020 21:29:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0vim=20torque?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go/map 和 slice 索引速度比较.md | 88 ++++ {jetbrains => ide/jetbrains}/http-client.md | 2 +- {jetbrains => ide/jetbrains}/ideavimrc | 0 introductionToAlgorithms/32字符串匹配.md | 15 + introductionToAlgorithms/sort.md | 1 + linux/awk.md | 37 ++ torque/torque.md | 136 ++++++ vim/mac.vimrc | 451 ++++++++++++++++++++ 8 files changed, 729 insertions(+), 1 deletion(-) create mode 100644 go/map 和 slice 索引速度比较.md rename {jetbrains => ide/jetbrains}/http-client.md (99%) rename {jetbrains => ide/jetbrains}/ideavimrc (100%) create mode 100644 introductionToAlgorithms/32字符串匹配.md create mode 100644 introductionToAlgorithms/sort.md create mode 100644 linux/awk.md create mode 100644 torque/torque.md create mode 100644 vim/mac.vimrc diff --git a/go/map 和 slice 索引速度比较.md b/go/map 和 slice 索引速度比较.md new file mode 100644 index 0000000..0225dd8 --- /dev/null +++ b/go/map 和 slice 索引速度比较.md @@ -0,0 +1,88 @@ +# golang 中map 和slice 索引速度比较 + +## 主文件 + +```go +package main + +var max = 100 +var Slice = make([]int, max+10) +var Map = make(map[int]int) + +func init() { + for i := 0; i < max; i++ { + Slice[i] = i + Map[i] = i + } +} + +// 查找算法可以优化,本文对于常用无序查找做比较 +func SearchSlice(i int) int { + for _, v := range Slice { + if v == i { + return v + } + } + return -1 +} + +func SearchMap(i int) int { + return Map[i] +} +``` + +## 测试文件 + +```go +package main + +import "testing" + +func BenchmarkSearchMap(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = SearchMap(i % max) + } +} + +func BenchmarkSearchSlice(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = SearchSlice(i % max) + } +} + +func BenchmarkSlice(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = Slice[i%max] + } +} +``` + +## 测试结果 + +max = 100 + +```bash +BenchmarkSearchMap-16 94148293 12.7 ns/op 0 B/op 0 allocs/op +BenchmarkSearchSlice-16 49473447 23.6 ns/op 0 B/op 0 allocs/op +BenchmarkSlice-16 187461336 6.46 ns/op 0 B/op 0 allocs/op +``` + +max = 10000 + +```bash +BenchmarkSearchMap-16 43147364 27.6 ns/op 0 B/op 0 allocs/op +BenchmarkSearchSlice-16 968623 1159 ns/op 0 B/op 0 allocs/op +BenchmarkSlice-16 187649472 6.42 ns/op 0 B/op 0 allocs/op +``` + +Max = 1000000 + +```bash +BenchmarkSearchMap-16 15015690 90.1 ns/op 0 B/op 0 allocs/op +BenchmarkSearchSlice-16 441436 104242 ns/op 0 B/op 0 allocs/op +BenchmarkSlice-16 182620702 6.58 ns/op 0 B/op 0 allocs/op +``` + + + +在一些特定优化条件下,可以尝试用slice,效果会比map好,比如把10^6^级的查找优化成3级10^2^查找, 对于一些结构体,可以根据某些特征分类或预先根据特征值排序 diff --git a/jetbrains/http-client.md b/ide/jetbrains/http-client.md similarity index 99% rename from jetbrains/http-client.md rename to ide/jetbrains/http-client.md index dab60bb..0420dc4 100644 --- a/jetbrains/http-client.md +++ b/ide/jetbrains/http-client.md @@ -85,4 +85,4 @@ Accept: application/json - 编辑窗口顶部,点击Run All Requests in File 会顺序执行所有请求 - ![image-20200112232328295](../static/img/image-20200112232328295.png) \ No newline at end of file + ![image-20200112232328295](../static/img/image-20200112232328295.png) diff --git a/jetbrains/ideavimrc b/ide/jetbrains/ideavimrc similarity index 100% rename from jetbrains/ideavimrc rename to ide/jetbrains/ideavimrc diff --git a/introductionToAlgorithms/32字符串匹配.md b/introductionToAlgorithms/32字符串匹配.md new file mode 100644 index 0000000..f122888 --- /dev/null +++ b/introductionToAlgorithms/32字符串匹配.md @@ -0,0 +1,15 @@ +# 字符串匹配 + +[TOC] + +## 概念 + +## 常用算法 + +### 朴素字符串匹配算法 + +### rabin-karp算法 + +### 有限自动机算法 + +### Knuth-Morris-Pratt diff --git a/introductionToAlgorithms/sort.md b/introductionToAlgorithms/sort.md new file mode 100644 index 0000000..0e35e5c --- /dev/null +++ b/introductionToAlgorithms/sort.md @@ -0,0 +1 @@ +# 常见排序算法 diff --git a/linux/awk.md b/linux/awk.md new file mode 100644 index 0000000..597a424 --- /dev/null +++ b/linux/awk.md @@ -0,0 +1,37 @@ +# awk 使用 + + + +[TOC] + +参考 + +https://blog.csdn.net/daily886/article/details/85156557 + + + +## 基本规则 + +> awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file + +常用形式: + +> Awk -F '' '//{command}' file + +- -F 'char': 确定分割符,默认分隔符是空格 +- 常用变脸$0 $1 $2 ... 0代表正行,1代表第一个切片 +- 格式化输出 awk '/pattern/ {printf "echo 1st %s", $1}' file +- 匹配规则在//之间 + +## 常用 + +### awk 中执行shell命令 + +对于 某行数据 Version = "v1.2.3" + +自动打标签并推送 + +> awk -F '"' '/Version/ {print $2;system("git tag "$2);system("git push origin "$2)}' onebd.go + +注意:在makefile中使用时$需用$$代替 + diff --git a/torque/torque.md b/torque/torque.md new file mode 100644 index 0000000..828cd99 --- /dev/null +++ b/torque/torque.md @@ -0,0 +1,136 @@ +# torque 简介 + +> PBS, Portable Batch System, 可执行程序的批处理系统,用来在计算机上做任务管理。主要有三个分支: +> +> - [openpbs](https://github.com/openpbs/openpbs)(开源) 早期的pbs系统,失去维护, 2016年后由PBS Pro接手,升级为[pbs pro opensource project](https://www.pbspro.org),目前更新频繁 +> - [Torque](https://github.com/adaptivecomputing/torque)(开源) openpbs的分支,由adaptivecomputing接手后持续更新,于2016年前停止更新 +> - PBS Pro(商业) openpbs的商业版本 +> +> torque 是一个分布式作业管理系统, PBS 分支之一, 可以在超算或集群上管理多个任务队列,每个队列关联特定的资源,比如a队列任务是写入日志,b队列任务是备份或者压缩日志,a队列随时响应, b队列每天提交一次任务等,每个队列有不同的特性需要不同的资源,torque就是在集群中分配管理这些资源,比如将任务a1分配到哪个节点执行,限制多少核数,限制多少内存,限制最多多长时间执行等。 + +## [torque 指令](http://docs.adaptivecomputing.com/torque/4-0-2/help.htm#topics/12-appendices/commandsOverview.htm) + +- [qsub](http://docs.adaptivecomputing.com/torque/4-0-2/help.htm#topics/commands/qsub.htm) 提交任务 + + ```bash + # 形如 qsub -n task_name -o output_path -q queue1_name -a date_time -l ncpus=16,mem=1024mb job.script + ``` + + | -n | 任务名 | + | ---- | --------------------------------------------------- | + | -o | 任务输出地址 | + | -q | 任务队列名称 | + | -a | 在什么时间之后执行 | + | -r | 该任务是否可以重新执行 | + | -u | -u user@host,user@host 定义可以执行的用户 | + | -v | 定义任务执行的环境变量, -v var1=value1,var2=value2 | + | -l | 定义硬件资源限制,-l ncpus=16,mem=1024mb | + | -d | 任务执行路径 | + +- qstat 查看任务状态 + +- qdel 删除或终止任务 + +- qhold 保留某任务,暂时不去执行 + +- qrls 释放某任务到等待执行状态 + + + +## PBS 脚本语法 + +一个 pbs 任务脚本 类似这样 + +```bash +#!/bin/bash + +#PBS -k o +#PBS -l nodes=2:ppn=6,walltime=30:00 +#PBS -M jthutt@tatooine.net +#PBS -m abe +#PBS -N JobName +#PBS -j oe + +mpiexec -np 12 -machinefile $PBS_NODEFILE ~/bin/binaryname +``` + +第一行指明用bash去执行该脚本, 后面几行声明一些任务参数,跟qsub指令参数一样。 + +最后一行就是真的的任务, 告诉系统用 mpiexec 这个指令在这些计算节点 $PBS_NODEFILE 上去执行 ~/bin/binaryname 这个命令 + + + +## MPI + +MPI是一个跨语言的通讯协议,基于此可用于编写并行计算程序。 + +mpi 有6个基本接口 + +| MPI_Init | 初始化,其后面到MPI_Finalize为止的代码在每个进程中都会执行一遍 | +| ------------- | ------------------------------------------------------------ | +| MPI_Comm_size | 获得进程个数n | +| MPI_Comm_rank | 获得本进程的id, 从0到n-1 | +| MPI_Send | 发送消息 | +| MPI_Recv | 收到消息 | +| MPI_Finalize | mpi 退出, 必须调用 | + + + +```c++ +// 示例 mpitest +// 0号进程接收消息 并 打印 +// 非0号进程发送消息 +#include +#include +#include "mpi.h" +void main(int argc, char* argv[]) +{ + int numprocs, myid, source; + MPI_Status status; + char message[100]; + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &myid); + MPI_Comm_size(MPI_COMM_WORLD, &numprocs); + if (myid != 0) { //非0号进程发送消息 + strcpy(message, "Hello World!"); + MPI_Send(message, strlen(message) + 1, MPI_CHAR, 0, 99, + MPI_COMM_WORLD); + } + else { // myid == 0,即0号进程接收消息 + for (source = 1; source < numprocs; source++) { + MPI_Recv(message, 100, MPI_CHAR, source, 99, + MPI_COMM_WORLD, &status); + printf("接收到第%d号进程发送的消息:%s\n", source, message); + } + } + MPI_Finalize(); +} +``` + + + +```bash +# mpitest 为上面文件编译后的可执行文件 +# 通过调用mpiexec 开4个进程同时运行mpitest +mpiexec -np 4 mpitest +# 输出 +接收到第1号进程发送的消息:Hello World! +接收到第2号进程发送的消息:Hello World! +接收到第3号进程发送的消息:Hello World! +``` + + + + + +### 参考 + + - https://en.wikipedia.org/wiki/Portable_Batch_System + - https://en.wikipedia.org/wiki/TORQUE + - https://kb.iu.edu/d/avmy + - http://docs.adaptivecomputing.com/torque/4-0-2/help.htm#topics/12-appendices/commandsOverview.htm + - [CentOS下torque集群配置(一)-torque安装与配置](https://blog.csdn.net/dream_angel_z/article/details/44225669/) + - [作业提交系统Torque个人安装总结(PBS)](https://blog.csdn.net/educast/article/details/7166764) + - [PBS命令和使用](https://www.cnblogs.com/yqsun/p/5433070.html) + - [MPI编程入门详解](https://www.jianshu.com/p/2fd31665e816) + diff --git a/vim/mac.vimrc b/vim/mac.vimrc new file mode 100644 index 0000000..35d6d02 --- /dev/null +++ b/vim/mac.vimrc @@ -0,0 +1,451 @@ +" set the runtime path to include Vundle and initialize +set rtp+=~/.fzf/ +set nocompatible +filetype off +set rtp+=~/.vim/bundle/Vundle.vim +call vundle#begin() + +Plugin 'VundleVim/Vundle.vim' + +" 中文输入法 +"Plugin 'humiaozuzu/fcitx-status' + +Plugin 'junegunn/fzf.vim' +" 搜索 +nmap l :BLines +nmap L :Lines + +"Plugin 'easymotion/vim-easymotion' +"Plugin 'ctrlpvim/ctrlp.vim' +let g:ctrlp_working_path_mode = 'wa' +let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files -co --exclude-standard'] + + +" 全局搜索,即使文件没打开 +Plugin 'rking/ag.vim' + + +" 新建文件自动添加模板 +Plugin 'aperezdc/vim-template.git' +let g:templates_directory = '~/.vim/templates' + + +Plugin 'w0rp/ale' +let g:ale_sign_column_always = 1 +let g:ale_set_highlights = 0 +"自定义error和warning图标 +let g:ale_sign_error = '✗' +let g:ale_sign_warning = '⚡' +"在vim自带的状态栏中整合ale +let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK'] +"显示Linter名称,出错或警告等相关信息 +let g:ale_echo_msg_error_str = 'E' +let g:ale_echo_msg_warning_str = 'W' +let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' +let s:error_symbol = get(g:, 'airline#extensions#ale#error_symbol', 'E:') +let s:warning_symbol = get(g:, 'airline#extensions#ale#warning_symbol', 'W:') +let g:ale_linters = { + \ 'c++': ['clang'], + \ 'c': ['clang'], + \ 'python': ['flake8'], + \ 'vue':['eslint'], + \ } +"普通模式下,ep前往上一个错误或警告,en前往下一个错误或警告 +nmap ep (ale_previous_wrap) +nmap en (ale_next_wrap) +"s触发/关闭语法检查 +nmap e :ALEToggle +"d查看错误或警告的详细信息 +nmap ed :ALEDetail + + + + + +"hightlight + +Plugin 'octol/vim-cpp-enhanced-highlight' +let g:cpp_class_scope_highlight = 1 +let g:cpp_member_variable_highlight = 1 +let g:cpp_class_decl_highlight = 1 + +Plugin 'https://github.com/hdima/python-syntax.git' +let python_highlight_all = 1 + +"注释插件 +Plugin 'scrooloose/nerdcommenter' + +" git 插件 +Plugin 'https://github.com/tpope/vim-fugitive.git' +Plugin 'airblade/vim-gitgutter' +set updatetime=100 + +"Plugin 'https://github.com/plytophogy/vim-virtualenv.git' +"let g:virtualenv_directory = '~/.virtualenv' + +Plugin 'godlygeek/tabular' +Plugin 'plasticboy/vim-markdown' +"Plugin 'suan/vim-instant-markdown' + +Plugin 'Valloric/YouCompleteMe' + +set runtimepath+=~/.vim/bundle/YouCompleteMe +autocmd InsertLeave * if pumvisible() == 0|pclose|endif "离开插入模式后自动关闭预览窗口" +let g:ycm_collect_identifiers_from_tags_files = 1 " 开启 YCM基于标签引擎 +"let g:syntastic_ignore_files=[".*\.py$"] +let g:ycm_seed_identifiers_with_syntax = 1 " 语法关键字补全 +let g:ycm_confirm_extra_conf = 0 " 关闭加载.ycm_extra_conf.py提示 +let g:ycm_key_list_select_completion = [''] " 映射按键,没有这个会拦截掉tab, 导致其他插件的tab不能用. +let g:ycm_key_list_previous_completion = [''] +let g:ycm_complete_in_comments = 1 " 在注释输入中也能补全 +let g:ycm_complete_in_strings = 1 " 在字符串输入中也能补全 +let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释和字符串中的文字也会被收入补全 +let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py' +"let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py' +let g:ycm_show_diagnostics_ui = 0 " 禁用语法检查 +"inoremap pumvisible() ? "\" : "\" " 回车即选中当前项 +nnoremap :YcmCompleter GoToDefinitionElseDeclaration " 跳转到定义处 +let g:ycm_min_num_of_chars_for_completion=2 + +"python auto complete plugin +Bundle 'davidhalter/jedi-vim' +Bundle 'ervandew/supertab' +let g:SuperTabDefaultCompletionType = "" + +" 前端 +" xml html auto close +" js 补全 +Plugin 'alvan/vim-closetag' +let g:jedi#documentation_command = "" +let g:closetag_filenames = '*.html,*.xhtml,*.phtml,*.launch,*.vue' +Plugin 'jiangmiao/auto-pairs' +Plugin 'valloric/matchtagalways' +let g:mta_filetypes = { + \ 'html' : 1, + \ 'xhtml' : 1, + \ 'xml' : 1, + \ 'jinja' : 1, + \ 'vue.javascript' : 1, + \} + +" css 颜色 +Plugin 'ap/vim-css-color' +Plugin 'posva/vim-vue' +" vue 解决语法高亮部分失效 +"let g:vue_disable_pre_processors=1 +"autocmd FileType vue.html.javascript.css.less.pug syntax sync fromstart +"autocmd BufRead,BufNewFile *.vue setlocal filetype=vue.html.javascript.css.pug + +Plugin 'marijnh/tern_for_vim' +" 鼠标停留在方法内时显示参数提示 +let g:tern_show_argument_hints = 'on_hold' +" 补全时显示函数类型定义 +let g:tern_show_signature_in_pum = 1 + +autocmd FileType javascript nnoremap :TernDef +autocmd FileType vue.javascript nnoremap :TernDef +" vue 补全js +autocmd BufRead,BufNewFile *.vue setlocal filetype=vue.javascript + +Plugin 'prettier/vim-prettier', { 'do': 'yarn install' } +" 项目目录下配置 ..prettierrc.json +" { +" singleQuote": true, +" semi": false +" } + + + + + + + +Plugin 'Chiel92/vim-autoformat' +noremap :Autoformat:w +let g:autoformat_verbosemode=1 + + + +Plugin 'vim-airline/vim-airline' +Plugin 'vim-airline/vim-airline-themes' +let g:airline_theme='bubblegum' +"vim-airline配置:优化vim界面" +"let g:airline#extensions#tabline#enabled = 1 +" airline设置 +" 显示颜色 +"set t_Co=256 +"set laststatus=2 +" 使用powerline打过补丁的字体 +let g:airline_powerline_fonts = 1 +" 开启tabline +let g:airline#extensions#tabline#enabled = 1 +" tabline中当前buffer两端的分隔字符 +let g:airline#extensions#tabline#left_sep = ' ' +" tabline中未激活buffer两端的分隔字符 +let g:airline#extensions#tabline#left_alt_sep = ' ' +" tabline中buffer显示编号 +let g:airline#extensions#tabline#buffer_nr_show = 1 +nnoremap [ :bp +nnoremap ] :bn +nnoremap :bp +nnoremap :bn +" 映射num到num buffer +"nmap :bn +map 1 :b 1 +map 2 :b 2 +map 3 :b 3 +map 4 :b 4 +map 5 :b 5 +map 6 :b 6 +map 7 :b 7 +map 8 :b 8 +map 9 :b 9 +map q :bwipeout + +nmap J 5j +nmap K 5k +nmap H 5h +nmap L 5l +nmap & $ + +nnoremap h +nnoremap l +nnoremap j +nnoremap k + + + +" ctags 配置 +"map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --languages=Python,C++ -f .tags . +"imap :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --languages=Python,C++ -f .tags . +set tags=tags +set tags+=.tags +set tags+=./.tags +"set tags+=~/.vim/systags +"set tags = + +Plugin 'https://github.com/majutsushi/tagbar.git' +"ctags 配置:F3快捷键显示程序中的各种tags,包括变量和函数等。 +map :TagbarToggle +let g:tagbar_ctags_bin="/usr/bin/ctags" +let g:tagbar_sort=0 +let g:tagbar_type_go = { + \ 'ctagstype': 'go', + \ 'kinds' : [ + \'p:package', + \'f:function', + \'v:variables', + \'t:type', + \'c:const' + \] + \} + +Plugin 'The-NERD-tree' +let NERDTreeIgnore=['\.pyc','\~$','\.swp'] +"NERDTree 配置:F2快捷键显示当前目录树 +map :NERDTreeToggle +let NERDTreeWinSize=25 +Plugin 'tiagofumo/vim-nerdtree-syntax-highlight' +Plugin 'Xuyuanp/nerdtree-git-plugin' +"Plugin 'ryanoasis/vim-devicons' + + + + +Plugin 'fatih/vim-go' +"let g:go_def_mode="godef" +let g:go_doc_keywordprg_enabled=0 +let g:go_def_mode='gopls' +let g:go_info_mode='gopls' + +"Plugin 'https://github.com/taketwo/vim-ros.git' + + +Plugin 'terryma/vim-multiple-cursors' +"Plugin 'Shougo/neocomplete.vim' + + +call vundle#end() " required + +" 在文件外修改时自动加载 +set autoread + +" make 项目 +autocmd FileType c,cpp map :w:make +map :call CompileRunGcc() + +func! CompileRunGcc() + exec "w" + if &filetype == 'c' + exec '!g++ % -o %<' + exec '!time ./%<' + elseif &filetype == 'cpp' + exec '!g++ % -o %< -lboost_system' + exec '!time ./%<' + elseif &filetype == 'python' + exec '!time python %' + elseif &filetype == 'sh' + :!time bash % + elseif &filetype == 'go' + exec 'GoRun' + endif +endfunc + +"从不备份 +set nobackup +"make 运行 +:set makeprg=g++\ -Wall\ \ % +"自动保存 +set autowrite +set ruler " 打开状态栏标尺 +set cursorline " 突出显示当前行 +set magic " 设置魔术 +"set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\ +" 设置在状态行显示的信息 +set foldcolumn=0 +set foldmethod=indent +set foldlevel=3 +set foldenable " 开始折叠 +" 不要使用vi的键盘模式,而是vim自己的 +set nocompatible +" 语法高亮 +syntax on +" 去掉输入错误的提示声音 +set noeb +" 在处理未保存或只读文件的时候,弹出确认 +set confirm +" 自动缩进 +set autoindent +set cindent +" Tab键的宽度 +set tabstop=4 +" 统一缩进为4 +set softtabstop=4 +set shiftwidth=4 +" 不要用空格代替制表符 +set expandtab +" 在行和段开始处使用制表符 +set smarttab +" 显示行号 +set number +set rnu +" 历史记录数 +set history=1000 +"禁止生成临时文件 +set nobackup +set noswapfile +"搜索忽略大小写 +set ignorecase +" 搜索时忽略大小写,但在有一个或以上大写字母时仍大小写敏感 +set ignorecase +set smartcase + + +"搜索逐字符高亮 +set hlsearch +set incsearch +"行内替换 +set gdefault +"编码设置 +set enc=utf-8 +set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936 +"语言设置 +set langmenu=zh_CN.UTF-8 +set helplang=cn +" 我的状态行显示的内容(包括文件类型和解码) +set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")} +set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%] +" 总是显示状态行 +set laststatus=2 +" 命令行(在状态行下)的高度,默认为1,这里是2 +set cmdheight=2 +" 侦测文件类型 +filetype on +set backspace=indent,eol,start +" 载入文件类型插件 +filetype plugin on +" 为特定文件类型载入相关缩进文件 +filetype indent on +" 保存全局变量 +set viminfo+=! +" 带有如下符号的单词不要被换行分割 +set iskeyword+=_,$,@,%,#,- +" 字符间插入的像素行数目 +set linespace=0 +" 增强模式中的命令行自动完成操作 +set wildmenu +" 使回格键(backspace)正常处理indent, eol, start等 +set backspace=2 +" 允许backspace和光标键跨越行边界 +set whichwrap+=<,>,h,l +" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位) +map ma :set mouse=a:set nu:set nopaste +map mc :set mouse=c:set nu!:set paste +set mouse=a + +" 选中状态下 Ctrl+c 复制 +vnoremap "+y + +" Ctrl+v +"nmap "+p + + +"set selection=exclusive +"set selectmode=mouse,key +" 通过使用: commands命令,告诉我们文件的哪一行被改变过 +set report=0 +" 在被分割的窗口间显示空白,便于阅读 +set fillchars=vert:\ ,stl:\ ,stlnc:\ +" 高亮显示匹配的括号 +set showmatch +" 匹配括号高亮的时间(单位是十分之一秒) +set matchtime=1 +" 光标移动到buffer的顶部和底部时保持3行距离 +set scrolloff=3 +" 为C程序提供自动缩进 +set smartindent +" 高亮显示普通txt文件(需要txt.vim脚本) +au BufRead,BufNewFile * setfiletype txt +filetype plugin indent on +"打开文件类型检测, 加了这句才可以用智能补全 +set completeopt=longest,menu + + + +" 打开文件时返回编辑的光标地点 +au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif + + + +" Delete trailing white space on save, useful for some filetypes ;) +fun! CleanExtraSpaces() + let save_cursor = getpos(".") + let old_query = getreg('/') + silent! %s/\s\+$//e + call setpos('.', save_cursor) + call setreg('/', old_query) +endfun + +if has("autocmd") + autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee,*.vue :call CleanExtraSpaces() +endif + + +colorscheme desert +"autocmd BufEnter +au BufNewFile,BufRead *.go highlight Character ctermfg=6 guifg=SkyBlue +"autocmd BufEnter * colorscheme desert +"autocmd BufEnter go colorscheme slate + +au BufNewFile,BufRead *.html,*.js,*.vue set tabstop=2 +au BufNewFile,BufRead *.html,*.js,*.vue set softtabstop=2 +au BufNewFile,BufRead *.html,*.js,*.vue set shiftwidth=2 +au BufNewFile,BufRead *.html,*.js,*.vue set expandtab +au BufNewFile,BufRead *.html,*.js,*.vue set autoindent +au BufNewFile,BufRead *.html,*.js,*.vue set fileformat=unix +au BufNewFile,BufRead *.vue syntax sync fromstart + + +au BufNewFile,BufRead *.launch,*.urdf set filetype=xml +set timeoutlen=1000 ttimeoutlen=0 +