Linux下编辑利器vim,vimrc,viminfo的高级用法

1、ci" (由 change operator 和 text-object i" 组成)

这个命令会找到当前光标所在行的下一个 " 括起来的字符串,清除引号裏面的内容,并进入 insert mode 以方便修改
用起来比解释起来简单,你可用 const char* hello = "Hello world."; 类似这样的代码来测试

2、yaB (由 yank operator 和 text-object aB 组成)

这个命令会将当前光标所在的代码块({} 括起来的内容,包括花括号本身)复制到默认 register,
方便在其他地方用 p 贴出来(当然,写代码不鼓励 copy and paste),你可用用任何一个 {} 来测试,然后找另外一个地方 p

3、gUiw (由 make uppercase operator 和 text-object iw 组成)

这个命令会将当前光标所在的 word 全部变成大写
如将 max_size 变成 MAX_SIZE

4、进入 insert mode 编辑(进入 insert mode 别只用 i,要习惯视乎情况,使用 I a A o O s C)

5、对齐 gg=G 快速对齐整个文件

6、tabnew mytab 新建一个标签mytab,:tabn 跳到下一个标签,:tabp 跳到上一个标签,用gt或gT在普通模式下跳转到下一个和上一个标签

7、切割窗口操作:split 水平方向切割一个窗口,:vsplit 竖直方向切割一个窗口,用Ctrl-w+方向键 在各个切割窗口之间切换。

8、宏操作

qa (将命令录制到a这个剪贴板上{vim有好多个剪贴板,比如abcdefg……})
3x (重复三遍删除操作,将foo删掉,其实也可以用f命令来搭配,对复杂的情况更适用)
0 (移动到行首)
j (移动到下一行)
q (停止录制)
3@a (重复三遍刚才录制的命令,3就是将命令重复3遍,@就是运行,a就是刚刚保存的那个剪贴板)

 10、配置.vimrc

"=========================================================================
"Dessription: .vimrc文件,for Linux
"Create: 2015年08月02日 15时13分
"Email:1002643051@qq.com
"Author:Kevin
"=========================================================================

"历史记录数
set history=10000

"显示行号
set number

"状态列的行数,预设一行,建议设成两行
set cmdheight=3

"保存全局变量,! 以大写字母开头的全局变数,并且不含有小写字母
set viminfo+=!

"让汉字以2个宽度显示
set ambiwidth=double

"Fill space between windows 在被分割的窗口间显示空白,便于阅读
set fillchars=stl: ,stlnc: ,vert:

"显示标尺 在状态行上显示光标所在位置的行号和列号
set ruler
set rulerformat=%20(%2*%<%f%= %m%r %3l %c %p%%%)

"在状态列显示目前的模式,命令行显示vim当前模式
set showmode

"输入的命令显示出来,看的清楚些
set showcmd

"光标移动到buffer的顶部和底部时保持3行距离
set scrolloff=3

"状态行显示的内容
set statusline=%F%m%r%h%w [FORMAT=%{&ff}] [TYPE=%Y] [POS=%l,%v][%p%%] %{strftime("%d/%m/%y - %H:%M")}

"启动显示状态行(1),总是显示状态行(2)
set laststatus=2

"去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
set nocompatible

"启动的时候不显示那个援助索马里儿童的提示
set shortmess=atI

"代码补全
set completeopt=preview,menu

"设置当文件被改动时自动载入
set autoread

"自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
set autowrite

"设置魔术匹配控制,可以通过:h magic查看更详细的帮助信息
set magic

"在处理未保存或只读文件的时候,弹出确认
set confirm

"字符间插入的像素行数目
set linespace=0

"增强模式中的命令行自动完成操作
set wildmenu

"可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
set mouse=a
set selection=exclusive
set selectmode=mouse,key

"通过使用: commands命令,告诉我们文件的哪一行被改变过
set report=0

"不让vim发出讨厌的滴滴声
set noerrorbells

"在执行宏命令时,不进行显示重绘;在宏命令执行完成后,一次性重绘,以便提高性能。
set lazyredraw

"===================语法======================================================
"打开语法高亮
syntax enable

"允许按指定主题进行语法高亮,而非默认高亮主题
syntax on

"设置颜色
colorscheme desert
set background=dark
color ron     " desert torte

"用浅色高亮当前行
autocmd InsertEnter * se cul

"设置高亮显示当前行
set cursorline

"开启高亮光标列
set cursorcolumn

"使回格键(backspace)正常处理indent, eol, start等
set backspace=2

"允许backspace和光标键跨越行边界
set whichwrap+=<,>,h,l

"===================Tab and indent===============================================
"不要用空格代替制表符
set expandtab

"在行和段开始处使用制表符
set smarttab

"统一缩进为4
set shiftwidth=4
set tabstop=4
set softtabstop=4

"设置自动缩排
set autoindent

"cindent对c语法的缩进更加智能灵活
set cindent

"比autoindent稍智能的自动缩进,在这种缩进模式中,每一行都和前一行有相同的缩进量  粘贴时候使用 set paste
set smartindent

"==============文件备份和编码===========================================================
"不自动保存备份文件
set nobackup

"禁止生成临时文件
set noswapfile

"自动切换当前目录为当前文件所在的目录
set autochdir

"设定默认解码
set fileencodings=utf-8
set fileformats=unix,dos,mac
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936

"====================Text search and replace=====================================
"高亮显示匹配的括号
set showmatch

"匹配括号高亮的时间(单位是十分之一秒)
set matchtime=2

"高亮显示查找搜索的值
set hlsearch

"在搜索时,输入的词句的逐字符高亮(类似firefox的搜索
set incsearch

"搜索时忽略大小写,但在有一个或以上大写字母时仍大小写敏感
set ignorecase

"如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用
set smartcase

"搜索时,不循环搜索
set nowrapscan

"带有如下符号的单词不要被换行分割
set iskeyword+=_,$,@,%,#,-,.
set helplang=cn
set list listchars=tab:| ,trail:.,extends:>,precedes:<

"状态行颜色
highlight StatusLine guifg=SlateBlue guibg=Yellow  " 状态行颜色
highlight StatusLineNC guifg=Gray guibg=White  " 状态行颜色

"高亮字符,让其不受100列限制
highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white
match OverLength '\%101v.*'

"与windows共享剪贴板
set clipboard+=unnamed

" 自动格式化
set formatoptions=tcrqn

"============CTags的设定  =============================================================
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
"按照名称排序
let Tlist_Sort_Type = "name"

"在右侧显示窗口
let Tlist_Use_Right_Window = 1

"压缩方式
let Tlist_Compart_Format = 1

"如果只有一个buffer,kill窗口也kill掉buffer
let Tlist_Exist_OnlyWindow = 1

"不要关闭其他文件的tags
let Tlist_File_Fold_Auto_Close = 0

"不要显示折叠树
let Tlist_Enable_Fold_Column = 0

"不同时显示多个文件的tag,只显示当前文件的
let Tlist_Show_One_File = 1
"============Autocommands =============================================================
" 只在下列文件类型被侦测到的时候显示行号,普通文本文件不显示
if has("autocmd")
    autocmd FileType xml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,ruby set number
    autocmd FileType xml,html vmap <C-o> <ESC>'<i<!--<ESC>o<ESC>'>o-->
    autocmd FileType java,c,cpp,cs vmap <C-o> <ESC>'<o/*<ESC>'>o*/
    autocmd FileType html,text,php,vim,c,java,xml,bash,shell,perl,python setlocal textwidth=100
    autocmd Filetype html,xml,xsl source $VIMRUNTIME/plugin/closetag.vim
                 if line("'"") > 0 && line("'"") <= line("{1}quot;) |
                   exe "normal g`"" |
                 endif
endif " has("autocmd")


"用空格键来开关折叠
set foldenable
"set foldmethod=manual
set foldmethod=syntax
set foldlevel=100
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>


"设置快捷方式 Set mapleader
let mapleader = ","

"快捷加载,当输入",ss"时,加载 .vimrc 文件
map <silent> <leader>ss :source ~/.vimrc<cr>
"快速打开编辑 .vimrc配置文件--->",ee"
map <silent> <leader>ee :e ~/.vimrc<cr>
"快速保存文件--->",w"
map <silent> <leader>w :w<cr>
"快速保存并退出文件--->",w"
map <silent> <leader>wq :wq<cr>
map <silent> <F9> :TlistToggle<cr> 

"使用前导键加w来实现加速文件保存,来代替:w!加回车  
nmap w :w!<cr>
nmap z :x<cr>

"ctages映射
autocmd! bufwritepost .vimrc source ~/.vimrc

" 高亮显示普通txt文件(需要txt.vim脚本)
au BufRead,BufNewFile *  setfiletype txt

"============自动补全 =============================================================

:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<cr>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair('}')<cr>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<cr>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i

function! ClosePair(char)
    if getline('.')[col('.') - 1] == a:char
        return "<Right>"
    else
        return a:char
    endif
endfunction

"侦测文件类型  载入文件类型插件
filetype plugin indent on

"关掉智能补全时的预览窗口
set completeopt=longest,menu

CTags安装

http://ctags.sourceforge.net/
tar zvxf ctags-5.6.tar.gz
cd ctags-5.6
./configure
make
make install
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q src 

 CTags插件下载

cd /usr/local/src
wget http://www.vim.org/scripts/download_script.php?src_id=19574
mv download_script.php?src_id=19574  vimtag.zip
unzip vimtag.zip
cp doc plugin ~/.vim/

 使用下面的命令生成帮助标签(下面的操作在vim中进行)

:helptags ~/.vim/doc 
:help taglist.txt 

 使用vundle安装插件

https://github.com/chenpingzhao/Vundle.vim.git ~/.vim/bundle/vundle


set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
 
" let Vundle manage Vundle
" required!
Bundle 'gmarik/vundle'
Bundle 'tpope/vim-fugitive'
Bundle 'Lokaltog/vim-easymotion'
Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}
Bundle 'tpope/vim-rails.git'
Bundle 'L9'
Bundle 'FuzzyFinder'
Bundle 'git://git.wincent.com/command-t.git'

filetype plugin indent on     " required!
"
" Brief help  -- 此处后面都是vundle的使用命令
" :BundleList          - list configured bundles
" :BundleInstall(!)    - install(update) bundles
" :BundleSearch(!) foo - search(or refresh cache first) for foo
" :BundleClean(!)      - confirm(or auto-approve) removal of unused bundles
"
" see :h vundle for more details or wiki for FAQ
" NOTE: comments after Bundle command are not allowed.. 

 配置语法高亮

:BundleInstall

加入的行

set laststatus=2
set t_Co=256
let g:Powerline_symbols='unicode'
set encoding=utf8
colorscheme desert

其他一些常用的命令

sudo !!  //以 root 帐户执行上一条命令
python -m SimpleHTTPServer //利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000 访问
:w !sudo tee % //在 Vim 中无需权限保存编辑的文件
cd - //更改到上一次访问的目录
^foo^bar //将上一条命令中的 foo 替换为 bar,并执行
cp filename{,.bak} //快速备份或复制文件
mtr google.com //traceroute + ping
!whatever:p //搜索命令历史,但不执行
ssh-copy-id user@host //将 ssh keys 复制到 user@host 以启用无密码 SSH 登录
ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg //把 Linux 桌面录制为视频

参考

http://easwy.com/blog/archives/advanced-vim-skills-omin-complete/comment-page-1/

http://www.vim.org/scripts/script.php?script_id=273

https://github.com/ma6174/vim

原文地址:https://www.cnblogs.com/chenpingzhao/p/4748338.html