vi编辑器——linuxmac环境中vimrc的位置及常用配置小记

Posted 扫地增

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vi编辑器——linuxmac环境中vimrc的位置及常用配置小记相关的知识,希望对你有一定的参考价值。

vimrc简介

vimrcvim 的配置文件,可以设置 vim 的配置,包括:热键、配色、语法高亮、插件 等 常用的插件有:

  • 代码补全
  • 代码折叠
  • 搜索
  • Git 集成 ……

vimrc文件位置

linux

在linux环境中有两个配置vim编辑器的配置文件位置
1.用户家目录(/home/用户名)下面有一个.vimrc

 ~/.vimrc

2./etc下面也有一个vimrc

 /etc/vim/vimrc

家目录下的配置文件优先级更高,由于不同用户的操作习惯和喜好不同,建议在修改时修改自己用户家目录下面的.vimrc 此配置文件只针对用户有效。如果在指定位置没有找到相关文件,可以自己直接创建,只需命名时使用 .vimrc作为名字即可。
.vimrc为隐藏文件 使用ls -al可查看。

Mac

macvim的配置文件是存在这个目录下的

/usr/share/vim/

你可以在/usr/share/vim下寻找相关目录

较为常用的配置说明

"vimrc配置文件内容如下:
 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 一般设定 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 设定默认解码 
set fenc=utf-8 
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936 
 
" 不要使用vi的键盘模式,而是vim自己的 
set nocompatible 
 
" history文件中需要记录的行数 
set history=100 
 
" 在处理未保存或只读文件的时候,弹出确认 
set confirm 
 
" 与windows共享剪贴板 
set clipboard+=unnamed 
 
" 侦测文件类型 
filetype on 
 
" 智能补全
set completeopt=longest,menu
 
" 载入文件类型插件 
filetype plugin on 
 
" 为特定文件类型载入相关缩进文件 
filetype indent on 
 
" 保存全局变量 
set viminfo+=! 
 
" 带有如下符号的单词不要被换行分割 
set iskeyword+=_,$,@,%,#,- 
 
" 语法高亮 
syntax enable
syntax on 
 
" 高亮字符,让其不受100列限制 
:highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white 
:match OverLength '\\%101v.*' 
 
" 状态行颜色 
highlight StatusLine guifg=SlateBlue guibg=Yellow 
highlight StatusLineNC guifg=Gray guibg=White 
 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 文件设置 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 不要备份文件(根据自己需要取舍) 
set nobackup 
 
" 不要生成swap文件,当buffer被丢弃的时候隐藏它 
setlocal noswapfile 
set bufhidden=hide 
 
" 字符间插入的像素行数目 
set linespace=0 
 
" 增强模式中的命令行自动完成操作 
set wildmenu 
 
" 在状态行上显示光标所在位置的行号和列号 
set ruler 
set rulerformat=%20(%2*%<%f%=\\ %m%r\\ %3l\\ %c\\ %p%%%) 
" 命令行(在状态行下)的高度,默认为1,这里是2 
set cmdheight=2 
" 使回格键(backspace)正常处理indent, eol, start等 
set backspace=2 
" 允许backspace和光标键跨越行边界 
set whichwrap+=<,>,h,l 
 
" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位) 
set mouse=a 
set selection=exclusive 
set selectmode=mouse,key 
 
" 启动的时候不显示那个援助索马里儿童的提示 
set shortmess=atI 
 
" 通过使用: commands命令,告诉我们文件的哪一行被改变过 
set report=0 
 
" 不让vim发出讨厌的滴滴声 
set noerrorbells 
 
" 在被分割的窗口间显示空白,便于阅读 
set fillchars=vert:\\ ,stl:\\ ,stlnc:\\ 
 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 搜索和匹配 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 高亮显示匹配的括号 
set showmatch 
 
" 匹配括号高亮的时间(单位是十分之一秒) 
set matchtime=5 
 
" 在搜索的时候忽略大小写 
set ignorecase 
 
" 不要高亮被搜索的句子(phrases) 
set nohlsearch 
 
" 在搜索时,输入的词句的逐字符高亮(类似firefox的搜索) 
set incsearch 
 
" 输入:set list命令是应该显示些啥? 
set listchars=tab:\\|\\ ,trail:.,extends:>,precedes:<,eol:$ 
" 光标移动到buffer的顶部和底部时保持3行距离 
set scrolloff=3 
" 不要闪烁 
set novisualbell 
" 我的状态行显示的内容(包括文件类型和解码) 
set statusline=%F%m%r%h%w\\[POS=%l,%v][%p%%]\\%{strftime(\\"%d/%m/%y\\ -\\ %H:%M\\")} 
" 总是显示状态行 
set laststatus=2 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 文本格式和排版 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 自动格式化 
set formatoptions=tcrqn 
" 继承前一行的缩进方式,特别适用于多行注释 
set autoindent 
" 为C程序提供自动缩进 
set smartindent 
" 使用C样式的缩进 
set cindent 
" 制表符为4 
set tabstop=4 
" 统一缩进为4 
set softtabstop=4 
set shiftwidth=4 
" 不要用空格代替制表符 
set noexpandtab 
" 不要换行 
set nowrap 
" 在行和段开始处使用制表符 
set smarttab 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 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 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""新文件标题
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""定义函数SetTitle,自动插入文件头 
func SetTitle() 
	"如果文件类型为.sh文件 
	if &filetype == 'sh' 
		call setline(1, "##########################################################################") 
		call append(line("."), "# File Name: ".expand("%")) 
		call append(line(".")+1, "# Author: kadoop") 
		call append(line(".")+2, "# mail: kadoop@163.com") 
		call append(line(".")+3, "# Created Time: ".strftime("%c")) 
		call append(line(".")+4, "#########################################################################") 
		call append(line(".")+5, "#!/bin/zsh")
		call append(line(".")+6, "PATH=/home/edison/bin:/home/edison/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/work/tools/gcc-3.4.5-glibc-2.3.6/bin")
		call append(line(".")+7, "export PATH")
		call append(line(".")+8, "")
	else 
		call setline(1, "/*************************************************************************") 
		call append(line("."), "	> File Name: ".expand("%")) 
		call append(line(".")+1, "	> Author: kadoop") 
		call append(line(".")+2, "	> Mail: kadoop@163.com") 
		call append(line(".")+3, "	> Created Time: ".strftime("%c")) 
		call append(line(".")+4, " ************************************************************************/") 
		call append(line(".")+5, "")
	endif
	if &filetype == 'cpp'
		call append(line(".")+6, "#include<iostream>")
    	call append(line(".")+7, "using namespace std;")
		call append(line(".")+8, "")
	endif
	if &filetype == 'c'
		call append(line(".")+6, "#include<stdio.h>")
		call append(line(".")+7, "")
	endif
	"	if &filetype == 'java'
	"		call append(line(".")+6,"public class ".expand("%"))
	"		call append(line(".")+7,"")
	"	endif
	"新建文件后,自动定位到文件末尾
	autocmd BufNewFile * normal G
endfunc
 
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" 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 
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 
autocmd BufReadPost * 
\\ if line("'\\"") > 0 && line("'\\"") <= line("$") | 
\\ exe " normal g`\\"" | 
\\ endif 
endif "has("autocmd") 
" F5编译和运行C程序,F6编译和运行C++程序 
" 请注意,下述代码在windows下使用会报错 
" 需要去掉./这两个字符 
" C的编译和运行 
map <F5> :call CompileRunGcc()<CR> 
func! CompileRunGcc() 
exec "w" 
exec "!gcc % -o %<" 
exec "! ./%<" 
endfunc 
 
" C++的编译和运行 
map <F6> :call CompileRunGpp()<CR> 
func! CompileRunGpp() 
exec "w" 
exec "!g++ % -o %<" 
exec "! ./%<" 
endfunc 
" 能够漂亮地显示.NFO文件 
set encoding=utf-8 
function! SetFileEncodings(encodings) 
let b:myfileencodingsbak=&fileencodings 
let &fileencodings=a:encodings 
endfunction 
function! RestoreFileEncodings() 
let &fileencodings=b:myfileencodingsbak 
unlet b:myfileencodingsbak 
endfunction 
au BufReadPre *.nfo call SetFileEncodings('cp437')|set ambiwidth=single au BufReadPost *.nfo call RestoreFileEncodings() 
" 高亮显示普通txt文件(需要txt.vim脚本) 
au BufRead,BufNewFile * setfiletype txt 
" 用空格键来开关折叠 
"set foldenable 
"set foldmethod=manual 
"nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc':'zo')<CR> 
 
" minibufexpl插件的一般设置 
let g:miniBufExplMapWindowNavVim = 1 
let g:miniBufExplMapWindowNavArrows = 1 
let g:miniBufExplMapCTabSwitchBufs = 1 
let g:miniBufExplModSelTarget = 1
" 配色方案
colorscheme desert
" Taglist 配置
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
" winmanager 配置
map wm :WMToggle<cr>
let g:winManagerWindowLayout='FileExplorer|TagList'
"cscope 配置
if has("cscope")
   set csprg=/usr/bin/cscope
   set csto=0
   set cst
   set nocsverb
   " add any database in current directory
   if filereadable("cscope.out")
       cs add cscope.out
        " else add database pointed to by environment
   elseif $CSCOPE_DB != ""
       cs add $CSCOPE_DB
   endif
   set csverb
endif
 
" cscope  快捷键
nmap<leader>sa :csadd cscope.out<cr>
nmap<leader>ss :cs find s<C-R>=expand("<cword>")<cr><cr>
nmap<leader>sg :cs find g <C-R>=expand("<cword>")<cr><cr>
nmap<leader>sc :cs find c <C-R>=expand("<cword>")<cr><cr>
nmap<leader>st :cs find t <C-R>=expand("<cword>")<cr><cr>
nmap<leader>se :cs find e <C-R>=expand("<cword>")<cr><cr>
nmap<leader>sf :cs find f<C-R>=expand("<cfile>")<cr><cr>
nmap<leader>si :cs find i<C-R>=expand("<cfile>")<cr><cr>
nmap<leader>sd :cs find d <C-R>=expand("<cword>")<cr><cr>
"MiniBufExplorer  配置
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1 
" grep 配置
nnoremap<F4>  /<C-R>=expand("<cword>")<cr><cr>
nnoremap<F3>  ?<C-R>=expand("<cword>")<cr><cr>
nnoremap <silent> <leader><F3> :Grep<CR> 
nnoremap <silent> <leader><F4> :Rgrep<CR> 
" SuperTab
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
" gvim字体
"set guifont=Courier\\ Regular\\ 20
"line
se nu
 
""
nnoremap <silent> <F12> :A<cr>

笔者使用的配置

"This must be first, because it changes other options as a side effect.
set nocompatible    "非兼容模式
"allow backspacing over everything in insert mode
set backspace=indent,eol,start

"if has("vms")
"set nobackup		" do not keep a backup file, use versions instead
"else
"  set backup		" keep a backup file
"endif

set history=50		" keep 50 lines of command line history
set matchtime=1
syntax on           "开启语法高亮
set background=dark "背景色
color desert
set ruler           "在左下角显示当前文件所在行
set showcmd         "在状态栏显示命令
set showmatch       "显示匹配的括号
set ignorecase      "大小写无关匹配
set smartcase       "只能匹配,即小写全匹配,大小写混合则严格匹配
set hlsearch        "搜索时高亮显示
set incsearch       "增量搜索
"set nohls           "搜索时随着输入立即定位,不知什么原因会关闭结果高亮
set report=0        "显示修改次数
set mouse=a         "控制台启用鼠标
set number          "行号
set nobackup        "无备份
set cursorline      "高亮当前行背景
set fileencodings=ucs-bom,UTF-8,GBK,BIG5,latin1
set fileencoding=UTF-8
set fileformat=unix "换行使用unix方式
set ambiwidth=double
set noerrorbells    "不显示响铃
set visualbell      "可视化铃声
set foldmarker={,}  "缩进符号
set foldmethod=indent   "缩进作为折叠标识
set foldlevel=100   "不自动折叠
set foldopen-=search    "搜索时不打开折叠
set foldopen-=undo  "撤销时不打开折叠
"set updatecount=0   "不使用交换文件
set magic           "使用正则时,除了$ . * ^以外的元字符都要加反斜线


set tabstop=4 "表示按一个tab之后,显示出来的相当于几个空格,默认的是8个。
set softtabstop=4 " 表示在编辑模式的时候按退格键的时候退回缩进的长度。
set shiftwidth=4 "表示每一级缩进的长度,一般设置成跟 softtabstop 一样
set expandtab "当设置成 expandtab 时,缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进
set autoindent      " 打开自动缩进,换行时与上一行对齐
set smartindent     " 打开智能缩进
set nocindent       " 默认打开,需要关闭

" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries
" let &guioptions = substitute(&guioptions, "t", "", "g")

" Don't use Ex mode, use Q for formatting
map Q gq

" CTRL-U in insert mode deletes a lot.  Use CTRL-G u to first break undo,
" so that you can undo CTRL-U after inserting a line break.
inoremap <C-U> <C-G>u<C-U>

" In many terminal emulators the mouse works just fine, thus enable it.
if has('mouse')
  set mouse-=a
endif

" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has("gui_running")
  "syntax on
  "set hlsearch
  set lines=25
  set columns=80
  set lazyredraw  "延迟重绘
  set guioptions-=m   "不显示菜单
  set guioptions-=T   "不显示工具栏
  set guifont=consolas\\ 10
endif

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  " Enable file type detection.
  " Use the default filetype settings, so that mail gets 'tw' set to 72,
  " 'cindent' is on in C files, etc.
  " Also load indent files, to automatically do language-dependent indenting.
  filetype plugin indent on

  " Put these in an autocmd group, so that we can delete them easily.
  augroup vimrcEx
  au!

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78 
  " When editing a file, always jump to the last known cursor position.
  " Don't do it when the position is invalid or when inside an event handler
  " (happens when dropping a file on gvim).
  " Also don't do it when the mark is in the first line, that is the default
  " position when opening a file.
  autocmd BufReadPost *
    \\ if line("'\\"") > 1 && line("'\\"") <= line("$") |
    \\   exe "normal! g`\\"" |
    \\ endif

  augroup END

else

  "set autoindent		" always set autoindenting on

endif " has("autocmd")

" Convenient command to see the difference between the current buffer and the
" file it was loaded from, thus the changes you made.
" Only define it when not defined already.
if !exists(":DiffOrig")
  command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
		  \\ | wincmd p | diffthis
endif

colorscheme desert
"colorscheme szt 
" ---------------------------------------------------
" plugin: Taglist
" ---------------------------------------------------
let Tlist_Auto_Open=1 "在启动 vim 后,自动打开 taglist 窗口
let Tlist_Show_One_File=1 "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow=1 "如果taglist 窗口是最后一个窗口,则退出vim
let Tlist_File_Fold_Auto_Close=1 "只显示当前文件tag,其它文件的tag折叠
" let Tlist_Ctags_Cmd='/usr/bin/ctags'


"" ---------------------------------------------------
" python_flod, pydiction
" ---------------------------------------------------
autocmd FileType python set omnifunc=pythoncomplete#Complete
set foldmethod=indent "python_flod.vim
let g:pydiction_location = '/usr/share/vim/vim72/pydiction/complete-dict'
let g:pydiction_menu_height = 20


set tags=tags;
set autochdir

" 定义映射键
imap () ()<Left>
imap [] []<Left>
imap {} {}<Left>
imap "" ""<Left>
imap '' ''<Left>

" vim保存session
let g:AutoSessionFile="project.vim"
let g:OrigPWD=getcwd()
if filereadable(g:AutoSessionFile)
    if argc() == 0
        au VimEnter * call EnterHandler()
        au VimLeave * call LeaveHandler()
    endif
endif
function! LeaveHandler()
    exec "mks! ".g:OrigPWD."/".g:AutoSessionFile
endfunction
function! EnterHandler()
    exe "source ".g:AutoSessionFile
endfunction

以上是关于vi编辑器——linuxmac环境中vimrc的位置及常用配置小记的主要内容,如果未能解决你的问题,请参考以下文章

Vi编辑器的配置

Linux vi 编辑器问题

vi和vim 编辑器显示行号

第4课.vi编辑器

Linux 使用vi和vim方向键变成了ABCD,按照网上的将vimrc_example.vim拷贝的用户目录下,改名为.vimrc 好了

vi 提示visual模式,不能使用鼠标粘贴复制问题