vim 高级使用技巧第一篇

前言:逃离windows有很长时间了,特别是当今android盛行的时代,我们没有理由不选择ubuntu作为编译开发android之首选。其实操作系统只是我们使用的一个工具,

windows也好linux也罢,自己用的好才是真的好。但是好的开发工具能让我们事半功倍。

 

  先谈谈我的编程开发工具之路,source insight3.5这都是刚工作必备之工具,简直就代码阅读开发之神器。但有一个缺点就是调试编译很是不方便。vs编程的高富帅,编程调试很是好用,界面相当的友好。基本上windows程序开发编译调试面面俱到全方位无死角。但是我们嵌入式开发大部分都是linux下的,这高大上的工具虽然眼馋,可是基本上高级功能我们只能想想,还是洗洗睡吧。

   

  俗话说工欲善其事必先利其器,那就让我们来一起学习linux下的开发工具吧!目前我使用的是ubuntu,但基本上linux系统都差不多,很明显的标志就是都有Terminal。

基于命令行的操作,vim更是linux的必备工具。说了半天我们进入主题吧vim编程环境搭建使用,大工程的阅读开发调试。

首先我们还是先来讲一下搭建:

sudo apt-get install vim exuberant-ctags cscope global;  (ubuntu14.04及以上版本执行即可,以下版本请先执行以下操作)

sudoadd-apt-repository ppa:fcwu-tw/ppa;

sudoapt-get update; 

sudo apt-get install vim;

 

  如果你对上面这些工具不熟悉请google, bing, baidu。有了这些工具我们还是只能简单的操作,对工程的阅读开发还是远远不够的。所以我们要配置vim,加入一些vim plugin,有两个文件.vimrc .vimrc.bundles 我配置的脚本首次需要下载请执行 :BundleInstall 安装脚本,下载完了你就可以使用它的强大功能了。你可以先看脚本中的中文注释,了解我们使用了那些快捷键,下篇我将介绍一下常用功能快捷键及大工程阅读开发。让你成为真正的键盘党,摆脱鼠标手。

废话不多说了直接上配置脚本vim 配置:

.vimrc(保存文件名放到你$HOME目录)

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" settings for vim
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
" This file contains some boilerplate settings for vim's cscope interface,
" plus some keyboard mappings that I've found useful.
"
" USAGE:
" -- vim 6:     Stick this file in your ~/.vim/plugin directory (or in a
"               'plugin' directory in some other directory that is in your "
"               'runtimepath'.  "
" Jason Duell   '[email protected]     2013/3/13
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""multi-encodingi setting多语言编码转换""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("multi_byte")
"set bomb
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,gb2312,gbk,big5,euc-jp,euc-kr
set encoding=utf8
" CJK environment detection and corresponding setting
if v:lang =~ "^zh_CN"
" Use cp936 to support GBK, euc-cn == gb2312
set encoding=cp936
set termencoding=cp936
set fileencoding=cp936
elseif v:lang =~ "^zh_TW"
" cp950, big5 or euc-tw
" Are they equal to each other?
set encoding=big5
set termencoding=big5
set fileencoding=big5
elseif v:lang =~ "^ko"
" Copied from someone's dotfile, untested
set encoding=euc-kr
set termencoding=euc-kr
set fileencoding=euc-kr
elseif v:lang =~ "^ja_JP"
" Copied from someone's dotfile, untested
set encoding=euc-jp
set termencoding=euc-jp
set fileencoding=euc-jp
endif
" Detect UTF-8 locale, and replace CJK setting if needed
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
endif
else
echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
endif


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""" Initial Plugin 加载插件""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" install Vundle bundles
if filereadable(expand("~/.vimrc.bundles"))
  source ~/.vimrc.bundles
endif


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""vim 样式配置""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 基础配置设置
filetype on                   "检测文件类型
filetype indent on           "针对不同的文件类型采用不同的缩进格式
filetype plugin on           "允许插件
filetype plugin indent on     "启动自动补全


"autocmd! bufwritepost _vimrc source %     "vimrc文件修改之后自动加载。 windows。
"autocmd! bufwritepost .vimrc source %     "vimrc文件修改之后自动加载。 linux。
syntax enable "开启代码高亮
syntax on "打开高亮
set completeopt=longest,menu "自动补全配置,让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
"set relativenumber number   "相对行号,可用Ctrl+n在相对/绝对行号间切换
set cursorcolumn             "突出显示当前列,可用Ctrl+m切换是否显示
"set cursorline               "突出显示当前行,可用Ctrl+m切换是否显示
set history=3000             "history存储长度
set nocompatible             "非兼容vi模式,避免以前版本的一些bug和局限
set nu "显示行数 
set shiftwidth=4             "换行时行间交错使用4空格
set cindent shiftwidth=4     "自动缩进4空格
set tabstop=4                 "让一个tab等于4个空格
set vb t_vb=
set showmatch                 "显示括号配对情况
set autoread                 "当文件在外部被改变时,Vim自动更新载入
set nowrap                   "设置不自动换行
set writebackup               "设置无备份文件
set nobackup "取消备份。 视情况自己改
set noswapfile "关闭交换文件
set showmode "开启模式显示  
set cmdheight=1               "命令部分高度为1 
set shortmess=atI             "启动的时候不显示那个援助索马里儿童的提示
set t_ti= t_te=               "退出vim后,内容显示在终端屏幕 设置 退出vim后,内容显示在终端屏幕, 可以用于查看和复制好处:误删什么的,如果以前屏幕打开,可以找回
" 去掉输入错误的提示声音
set title                     "change the terminal's title
set novisualbell             "don't beep
set noerrorbells             "don't beep
set t_vb=
set tm=500


"set backup                   "备份
"set backupext=.bak
"set backupdir=/tmp/vimbk/
set mat=4                     "Blink times every second when matching brackets
set hidden                   "A buffer becomes hidden when it is abandoned
set wildmode=list:longest
set ttyfast


set wildignore=*.swp,*.bak,*.pyc,*.class
set scrolloff=3               "至少有3行在光标所在行上下


set selection=old
set selectmode=mouse,key
set viminfo^=%                   "Remember info about open buffers on close
set viminfo+=! " 保存全局变量
set magic                       "正则表达式匹配形式
set backspace=eol,start,indent   "Configure backspace so it acts as it should act
"set backspace=indent,eol,start whichwrap+=<,>,[,] "允许退格键的使用
"set iskeyword+=_,$,@,%,#,-   "带有如下符号的单词不要被换行分割 
set iskeyword+=_,$,@,%,#   "带有如下符号的单词不要被换行分割 
" 字符间插入的像素行数目
au BufRead,BufNewFile *.{md,mdown,mkd,mkdn,markdown,mdwn}   set filetype=mkd   "markdown配置


"set go=             "不要图形按钮  
set cul             "高亮光标所在行
autocmd InsertEnter * se cul "用浅色高亮当前行  
set ruler           "显示标尺  
set showcmd         "输入的命令显示出来,看的清楚些  


" Set extra options when running in GUI mode
if has("gui_running")
    set guifont=Monaco:h14
    set guioptions-=T
    set guioptions+=e
    set guioptions-=r
    set guioptions-=L
    set guitablabel=%M\ %t
    set showtabline=1
    set linespace=4
    set noimd
    set t_Co=256
else
"set guifont=Courier_New:h10:cANSI  " 设置字体  
set guifont=Fixedsys:h12:cANSI" 设置字体  


endif


"设置标记一列的背景颜色和数字一行颜色一致
hi! link SignColumn   LineNr
hi! link ShowMarksHLl DiffAdd
hi! link ShowMarksHLu DiffChange
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}  "状态行显示的内容
set statusline+=%f       "不显示工具条
ret laststatus=2     "启动显示状态行(1),总是显示状态行(2)  


" max memory (in KiB) used for pattern matching
"set maxmempattern=100
"set foldenable     "允许折叠  
"set foldmethod=manual   "手动折叠 


" 选中模式 Ctrl+c 复制选中的文本
"vnoremap <c-c> "+y
" 普通模式下 Ctrl+c 复制文件路径
"nnoremap <c-c> :let @+ = expand('%:p')<cr>


" Shift + Insert 插入系统剪切板中的内容
"noremap <S-Insert> "+p
"vnoremap <S-Insert> d"+P
"inoremap <S-Insert> <esc>"+pa
"inoremap <C-S-Insert> <esc>pa


"set ignorecase "搜索时忽略大小写 
set hlsearch                 "高亮显示结果
"set nohlsearch "关闭搜索高亮  
set incsearch                 "在输入要搜索的文字时,vim会实时匹配
" 有一个或以上大写字母时仍大小写敏感
set smartcase     "ignore case if search pattern is all lowercase, case-sensitive otherwise
"autocmd BufEnter * cd %:c:p:h   "设置状态栏


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" F1 - F6 设置
" F1 废弃这个键,防止调出系统帮助
" F2 行号开关,用于鼠标复制代码用
" F3 换行开关
" F4 调出listbar函数列表
" F5 粘贴模式paste_mode开关,用于有格式的代码粘贴
" F6 语法开关,关闭语法可以加快大文件的展示
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


" I can type :help on my own, thanks.  Protect your fat fingers from the evils of <F1>
noremap <F1> <Esc>"
nnoremap <F2> :set nonumber! number?<CR>
nnoremap <F3> :set wrap! wrap?<CR>
nmap <silent> <F4> :TagbarToggle<CR> "按下F4就可以呼出文件的函数列表及变量
set pastetoggle=<F5>             "when in insert mode, press <F5> to go to
                                "paste mode, where you can paste mass data
                                "that won't be autoindented
au InsertLeave * set nopaste
nnoremap <F6> :exec exists('syntax_on') ? 'syn off' : 'syn on'<CR>


" disbale paste mode when leaving insert mode


"Smart way to move between windows 分屏窗口移动
"则可以用<C-h,j,k,l>切换到上下左右的窗口中去,就像:
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l


"Treat long lines as break lines (useful when moving around in them)
"se swap之后,同物理行上线直接跳
nnoremap k gk
nnoremap gk k
nnoremap j gj
nnoremap gj j
" Go to home and end using capitalized directions
noremap H ^
noremap L $


" 命令行模式增强,ctrl - a到行首, -e 到行尾
cnoremap <C-a> <Home>
cnoremap <C-e> <End>


" 去掉搜索高亮
noremap <silent><leader>/ :nohls<CR>


" --------tab/buffer相关


"Use arrow key to change buffer"
noremap <left> :bp<CR>
noremap <right> :bn<CR>


map <leader>tn :tabnew<cr>
map <leader>to :tabonly<cr>
map <leader>tc :tabclose<cr>
map <leader>tm :tabmove


" Opens a new tab with the current buffer's path
" Super useful when editing files in the same directory
map <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/


"共享剪贴板  
set clipboard+=unnamed 


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("autocmd")
filetype plugin indent on   "根据文件进行缩进 
    augroup vimrcEx
        au!
        autocmd FileType text setlocal textwidth=78
        autocmd BufReadPost *
                    \ if line("'\"") > 1 && line("'\"") <= line("$") |
                    \ exe "normal! g`\"" |
                    \ endif
    augroup END
"autocmd Filetype c      set omnifunc=ccomplete#Complete
"autocmd Filetype html   set omnifunc=htmlcomplete#CompleteTags
"autocmd Filetype xml    set omnifunc=xmlcomplete#CompleteTags
"autocmd Filetype python set omnifunc=pythoncomplete#CompleteTags
"autocmd Filetype tex    set omnifunc=syntaxcomplete#Complete
autocmd FileType c,cpp set shiftwidth=4 | set expandtab "每次在编辑c文件时,它的自动缩进为4个空格;当你在插入模式下使用CTRL-D、CTRL-T缩进时,它也会调整4个空格的缩进;当你按TAB键时,它将会插入8个空格
    "set cinoptions={0,1s,t0,n,p2s,(03s,=.5s,>1s,=1s,:1s
    "智能缩进,相应的有cindent,官方说autoindent可以支持各种文件的缩进,但是效果会比只支持C/C++的cindent效果会差一点,但笔者并没有看出来
    set ai!                     "设置自动缩进
    set smartindent             "智能自动缩进
    set noautoindent             "自动对齐 设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置
else
    "智能缩进,相应的有cindent,官方说autoindent可以支持各种文件的缩进,但是效果会比只支持C/C++的cindent效果会差一点,但笔者并没有看出来
    set ai!                     "设置自动缩进
    set smartindent             "智能自动缩进
    set noautoindent             "自动对齐 设置自动缩进:即每行的缩进值与上一行相等;使用 noautoindent 取消设置
endif " has("autocmd")


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""设置cscope ctags"配置"""""""""""&#

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值