Cygwin环境下vim配置

Posted ragus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cygwin环境下vim配置相关的知识,希望对你有一定的参考价值。

Cygwin环境下vim配置

vim是Linux发行版的标配编辑器。为什么还要使用cygwin?因为,不可能所有软件/开发都在linux下进行。许多的开发者还在windows下进行。而要使用命令行的便捷工具,于是就有了cygwin。官网看这里http://cygwin.com/

Get that Linux feeling - on Windows

vim是件上古神器,官网上说, Vim:Thepower toolforeveryone!unix诞生时,就有vi编辑器。后经imporved升级为vim。功能强劲,不输任何的IDE。就在现代化的今天,也仍然活跃在无数的服务器,无数的终端上。

用户的配置文件放置在 ~/.vimrc。如果不存在,就创建一个。vim运行的时候,会去加载这个配置文件,里面的配置项就会生效。

工欲善其事必先利其器。我们看看都有哪些配置项应该加上。下面的部分来自http://www.cnblogs.com/witcxc/archive/2011/12/28/2304704.html

 
   
   
 
  1. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  2. " 一般设定

  3. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  4. " 设定默认解码

  5. set fenc=utf-8

  6. set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936

  7. " 不要使用vi的键盘模式,而是vim自己的

  8. set nocompatible

  9. " history文件中需要记录的行数

  10. set history=100

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

  12. set confirm

  13. " windows共享剪贴板

  14. set clipboard+=unnamed

  15. " 侦测文件类型

  16. filetype on

  17. " 载入文件类型插件

  18. filetype plugin on

  19. " 为特定文件类型载入相关缩进文件

  20. filetype indent on

  21. " 保存全局变量

  22. set viminfo+=!

  23. " 带有如下符号的单词不要被换行分割

  24. set iskeyword+=_,$,@,%,#,-

  25. " 语法高亮

  26. syntax on

  27. " 高亮字符,让其不受100列限制

  28. :highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white

  29. :match OverLength '\%101v.*'

  30. " 状态行颜色

  31. highlight StatusLine guifg=SlateBlue guibg=Yellow

  32. highlight StatusLineNC guifg=Gray guibg=White

  33. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  34. " 文件设置

  35. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  36. " 不要备份文件(根据自己需要取舍)

  37. set nobackup

  38. " 不要生成swap文件,当buffer被丢弃的时候隐藏它

  39. setlocal noswapfile

  40. set bufhidden=hide

  41. " 字符间插入的像素行数目

  42. set linespace=0

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

  44. set wildmenu

  45. " 在状态行上显示光标所在位置的行号和列号

  46. set ruler

  47. set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l\ %c\ %p%%%)

  48. " 命令行(在状态行下)的高度,默认为1,这里是2

  49. set cmdheight=2

  50. " 使回格键(backspace)正常处理indent, eol, start

  51. set backspace=2

  52. " 允许backspace和光标键跨越行边界

  53. set whichwrap+=<,>,h,l

  54. " 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)

  55. set mouse=a

  56. set selection=exclusive

  57. set selectmode=mouse,key

  58. " 启动的时候不显示那个援助索马里儿童的提示

  59. set shortmess=atI

  60. " 通过使用: commands命令,告诉我们文件的哪一行被改变过

  61. set report=0

  62. " 不让vim发出讨厌的滴滴声

  63. set noerrorbells

  64. " 在被分割的窗口间显示空白,便于阅读

  65. set fillchars=vert:\ ,stl:\ ,stlnc:\

  66. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  67. " 搜索和匹配

  68. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  69. " 高亮显示匹配的括号

  70. set showmatch

  71. " 匹配括号高亮的时间(单位是十分之一秒)

  72. set matchtime=5

  73. " 在搜索的时候忽略大小写

  74. set ignorecase

  75. " 不要高亮被搜索的句子(phrases)

  76. set nohlsearch

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

  78. set incsearch

  79. " 输入:set list命令是应该显示些啥?

  80. set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$

  81. " 光标移动到buffer的顶部和底部时保持3行距离

  82. set scrolloff=3

  83. " 不要闪烁

  84. set novisualbell

  85. " 我的状态行显示的内容(包括文件类型和解码)

  86. set statusline=%F%m%r%h%w\[POS=%l,%v][%p%%]\%{strftime(\"%d/%m/%y\ -\ %H:%M\")}

  87. " 总是显示状态行

  88. set laststatus=2

  89. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  90. " 文本格式和排版

  91. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  92. " 自动格式化

  93. set formatoptions=tcrqn

  94. " 继承前一行的缩进方式,特别适用于多行注释

  95. set autoindent

  96. " 为C程序提供自动缩进

  97. set smartindent

  98. " 使用C样式的缩进

  99. set cindent

  100. " 制表符为4

  101. set tabstop=4

  102. " 统一缩进为4

  103. set softtabstop=4

  104. set shiftwidth=4

  105. " 不要用空格代替制表符

  106. set noexpandtab

  107. " 不要换行

  108. set nowrap

  109. " 在行和段开始处使用制表符

  110. set smarttab

  111. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  112. " CTags的设定

  113. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  114. " 按照名称排序

  115. let Tlist_Sort_Type = "name"

  116. " 在右侧显示窗口

  117. let Tlist_Use_Right_Window = 1

  118. " 压缩方式

  119. let Tlist_Compart_Format = 1

  120. " 如果只有一个bufferkill窗口也killbuffer

  121. let Tlist_Exist_OnlyWindow = 1

  122. " 不要关闭其他文件的tags

  123. let Tlist_File_Fold_Auto_Close = 0

  124. " 不要显示折叠树

  125. let Tlist_Enable_Fold_Column = 0

  126. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  127. " Autocommands

  128. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  129. " 只在下列文件类型被侦测到的时候显示行号,普通文本文件不显示

  130. if has("autocmd")

  131. autocmd FileType xml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,ruby set number

  132. autocmd FileType xml,html vmap <C-o> <ESC>'<i<!--<ESC>o<ESC>'>o-->

  133. autocmd FileType java,c,cpp,cs vmap <C-o> <ESC>'<o

  134. autocmd FileType html,text,php,vim,c,java,xml,bash,shell,perl,python setlocal textwidth=100

  135. autocmd Filetype html,xml,xsl source $VIMRUNTIME/plugin/closetag.vim

  136. autocmd BufReadPost *

  137. \ if line("'\"") > 0 && line("'\"") <= line("$") |

  138. \ exe " normal g`\"" |

  139. \ endif

  140. endif "has("autocmd")

  141. " F5编译和运行C程序,F6编译和运行C++程序

  142. " 请注意,下述代码在windows下使用会报错

  143. " 需要去掉./这两个字符

  144. " C的编译和运行

  145. map <F5> :call CompileRunGcc()<CR>

  146. func! CompileRunGcc()

  147. exec "w"

  148. exec "!gcc % -o %<"

  149. exec "! ./%<"

  150. endfunc

  151. " C++的编译和运行

  152. map <F6> :call CompileRunGpp()<CR>

  153. func! CompileRunGpp()

  154. exec "w"

  155. exec "!g++ % -o %<"

  156. exec "! ./%<"

  157. endfunc

  158. " 能够漂亮地显示.NFO文件

  159. set encoding=utf-8

  160. function! SetFileEncodings(encodings)

  161. let b:myfileencodingsbak=&fileencodings

  162. let &fileencodings=a:encodings

  163. endfunction

  164. function! RestoreFileEncodings()

  165. let &fileencodings=b:myfileencodingsbak

  166. unlet b:myfileencodingsbak

  167. endfunction

  168. au BufReadPre *.nfo call SetFileEncodings('cp437')|set ambiwidth=single au BufReadPost *.nfo call RestoreFileEncodings()

  169. " 高亮显示普通txt文件(需要txt.vim脚本)

  170. au BufRead,BufNewFile * setfiletype txt

  171. " 用空格键来开关折叠

  172. set foldenable

  173. set foldmethod=manual

  174. nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc':'zo')<CR>

  175. " minibufexpl插件的一般设置

  176. let g:miniBufExplMapWindowNavVim = 1

  177. let g:miniBufExplMapWindowNavArrows = 1

  178. let g:miniBufExplMapCTabSwitchBufs = 1

  179. let g:miniBufExplModSelTarget = 1

完成编辑 .vimrc 后保存,再次打开vim,就会看到各个选项的功能。比如位置ruler、高亮hlsearch、缩进indent等。

这样配置完,还不算。还有功能强大的vim插件,都是些效率工具,可以显著提高我们的工作质量和效率。

如何安装vim插件?

插件管理工具vunble。vundle是vim的插件管理工具,它能够搜索、安装、更新和移除vim插件,再也不需要手动管理vim插件。安装vundle使用git方式:

 
   
   
 
  1. git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

bundle分为三类,比较常用就是第二种:

  1. 在Github vim-scripts 用户下的repos,只需要写出repos名称

  2. 在Github其他用户下的repos, 需要写出”用户名/repos名”

  3. 不在Github上的插件,需要写出git全路径

下面是一个有用的配置文件,读者可自行测试:

 
   
   
 
  1. set nocompatible              " be iMproved, required

  2. filetype off                  " required

  3. " set the runtime path to include Vundle and initialize

  4. set rtp+=~/.vim/bundle/Vundle.vim

  5. call vundle#begin()

  6. " alternatively, pass a path where Vundle should install plugins

  7. "call vundle#begin('~/some/path/here')

  8. " let Vundle manage Vundle, required

  9. Plugin 'gmarik/Vundle.vim'

  10. " The following are examples of different formats supported.

  11. " Keep Plugin commands between vundle#begin/end.

  12. " plugin on GitHub repo

  13. Plugin 'tpope/vim-fugitive'

  14. Plugin 'Lokaltog/vim-easymotion'

  15. Plugin 'tpope/vim-rails.git'

  16. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  17. " Define Plugins via Github repos

  18. Plugin 'christoomey/vim-run-interactive'

  19. Plugin 'Valloric/YouCompleteMe'

  20. Plugin 'croaky/vim-colors-github'

  21. Plugin 'danro/rename.vim'

  22. " Plugin 'majutsushi/tagbar'

  23. Plugin 'kchmck/vim-coffee-script'

  24. Plugin 'kien/ctrlp.vim'

  25. Plugin 'pbrisbin/vim-mkdir'

  26. Plugin 'scrooloose/syntastic'

  27. Plugin 'slim-template/vim-slim'

  28. Plugin 'thoughtbot/vim-rspec'

  29. Plugin 'tpope/vim-Pluginr'

  30. Plugin 'tpope/vim-endwise'

  31. Plugin 'tpope/vim-fugitive'

  32. Plugin 'tpope/vim-rails'

  33. Plugin 'tpope/vim-surround'

  34. Plugin 'vim-ruby/vim-ruby'

  35. Plugin 'vim-scripts/ctags.vim'

  36. Plugin 'vim-scripts/matchit.zip'

  37. Plugin 'vim-scripts/tComment'

  38. Plugin 'mattn/emmet-vim'

  39. Plugin 'scrooloose/nerdtree'

  40. Plugin 'Lokaltog/vim-powerline'

  41. Plugin 'godlygeek/tabular'

  42. Plugin 'msanders/snipmate.vim'

  43. Plugin 'jelera/vim-javascript-syntax'

  44. Plugin 'altercation/vim-colors-solarized'

  45. Plugin 'othree/html5.vim'

  46. Plugin 'xsbeats/vim-blade'

  47. Plugin 'Raimondi/delimitMate'

  48. Plugin 'groenewege/vim-less'

  49. Plugin 'evanmiller/nginx-vim-syntax'

  50. Plugin 'Lokaltog/vim-easymotion'

  51. Plugin 'tomasr/molokai'

  52. Plugin 'klen/python-mode'

  53. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  54. " plugin from http://vim-scripts.org/vim/scripts.html

  55. Plugin 'L9'

  56. Plugin 'FuzzyFinder'

  57. Plugin 'Valloric/YouCompleteMe'

  58. Plugin 'ctrlpvim/ctrlp.vim'

  59. " Git plugin not hosted on GitHub

  60. Plugin 'git://git.wincent.com/command-t.git'

  61. " git repos on your local machine (i.e. when working on your own plugin)

  62. " Plugin 'file:///home/gmarik/path/to/plugin'

  63. " The sparkup vim script is in a subdirectory of this repo called vim.

  64. " Pass the path to set the runtimepath properly.

  65. Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}

  66. " Avoid a name conflict with L9

  67. " Plugin 'user/L9', {'name': 'newL9'}

  68. " All of your Plugins must be added before the following line

  69. call vundle#end()            " required

  70. filetype plugin indent on    " required

  71. " To ignore plugin indent changes, instead use:

  72. "filetype plugin on

  73. "

  74. " Brief help

  75. " :PluginList       - lists configured plugins

  76. " :PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate

  77. " :PluginSearch foo - searches for foo; append `!` to refresh local cache

  78. " :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal

  79. "

  80. " see :h vundle for more details or wiki for FAQ

  81. " Put your non-Plugin stuff after this line

  82. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  83. " 一般设定

  84. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  85. " 设定默认解码

  86. set fenc=utf-8

  87. set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936

  88. " 不要使用vi的键盘模式,而是vim自己的

  89. set nocompatible

  90. " history文件中需要记录的行数

  91. set history=100

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

  93. set confirm

  94. " windows共享剪贴板

  95. set clipboard+=unnamed

  96. " 侦测文件类型

  97. filetype on

  98. " 载入文件类型插件

  99. filetype plugin on

  100. " 为特定文件类型载入相关缩进文件

  101. filetype indent on

  102. " 保存全局变量

  103. set viminfo+=!

  104. " 带有如下符号的单词不要被换行分割

  105. set iskeyword+=_,$,@,%,#,-

  106. " 语法高亮

  107. syntax on

  108. " 高亮字符,让其不受100列限制

  109. :highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white

  110. :match OverLength '\%101v.*'

  111. " 状态行颜色

  112. highlight StatusLine guifg=SlateBlue guibg=Yellow

  113. highlight StatusLineNC guifg=Gray guibg=White

  114. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  115. " 文件设置

  116. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  117. " 不要备份文件(根据自己需要取舍)

  118. set nobackup

  119. " 不要生成swap文件,当buffer被丢弃的时候隐藏它

  120. setlocal noswapfile

  121. set bufhidden=hide

  122. " 字符间插入的像素行数目

  123. set linespace=0

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

  125. set wildmenu

  126. " 在状态行上显示光标所在位置的行号和列号

  127. set ruler

  128. set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l\ %c\ %p%%%)

  129. " 命令行(在状态行下)的高度,默认为1,这里是2

  130. set cmdheight=2

  131. " 使回格键(backspace)正常处理indent, eol, start

  132. set backspace=2

  133. " 允许backspace和光标键跨越行边界

  134. set whichwrap+=<,>,h,l

  135. " 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)

  136. set mouse=a

  137. set selection=exclusive

  138. set selectmode=mouse,key

  139. " 启动的时候不显示那个援助索马里儿童的提示

  140. set shortmess=atI

  141. " 通过使用: commands命令,告诉我们文件的哪一行被改变过

  142. set report=0

  143. " 不让vim发出讨厌的滴滴声

  144. set noerrorbells

  145. " 在被分割的窗口间显示空白,便于阅读

  146. set fillchars=vert:\ ,stl:\ ,stlnc:\

  147. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  148. " 搜索和匹配

  149. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  150. " 高亮显示匹配的括号

  151. set showmatch

  152. " 匹配括号高亮的时间(单位是十分之一秒)

  153. set matchtime=5

  154. " 在搜索的时候忽略大小写

  155. set ignorecase

  156. " 不要高亮被搜索的句子(phrases)

  157. set nohlsearch

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

  159. set incsearch

  160. " 输入:set list命令是应该显示些啥?

  161. set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$

  162. " 光标移动到buffer的顶部和底部时保持3行距离

  163. set scrolloff=3

  164. " 不要闪烁

  165. set novisualbell

  166. " 我的状态行显示的内容(包括文件类型和解码)

  167. set statusline=%F%m%r%h%w\[POS=%l,%v][%p%%]\%{strftime(\"%d/%m/%y\ -\ %H:%M\")}

  168. " 总是显示状态行

  169. set laststatus=2

  170. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  171. " 文本格式和排版

  172. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  173. " 自动格式化

  174. set formatoptions=tcrqn

  175. " 继承前一行的缩进方式,特别适用于多行注释

  176. set autoindent

  177. " 为C程序提供自动缩进

  178. set smartindent

  179. " 使用C样式的缩进

  180. set cindent

  181. " 制表符为4

  182. set tabstop=4

  183. " 统一缩进为4

  184. set softtabstop=4

  185. set shiftwidth=4

  186. " 不要用空格代替制表符

  187. set noexpandtab

  188. " 不要换行

  189. set nowrap

  190. " 在行和段开始处使用制表符

  191. set smarttab

  192. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  193. " CTags的设定

  194. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  195. " 按照名称排序

  196. let Tlist_Sort_Type = "name"

  197. " 在右侧显示窗口

  198. let Tlist_Use_Right_Window = 1

  199. " 压缩方式

  200. let Tlist_Compart_Format = 1

  201. " 如果只有一个bufferkill窗口也killbuffer

  202. let Tlist_Exist_OnlyWindow = 1

  203. " 不要关闭其他文件的tags

  204. let Tlist_File_Fold_Auto_Close = 0

  205. " 不要显示折叠树

  206. let Tlist_Enable_Fold_Column = 0

  207. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  208. " Autocommands

  209. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

  210. " 只在下列文件类型被侦测到的时候显示行号,普通文本文件不显示

  211. if has("autocmd")

  212. autocmd FileType xml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,ruby set number

  213. autocmd FileType xml,html vmap <C-o> <ESC>'<i<!--<ESC>o<ESC>'>o-->

  214. autocmd FileType java,c,cpp,cs vmap <C-o> <ESC>'<o

  215. autocmd FileType html,text,php,vim,c,java,xml,bash,shell,perl,python setlocal textwidth=100

  216. autocmd Filetype html,xml,xsl source $VIMRUNTIME/plugin/closetag.vim

  217. autocmd BufReadPost *

  218. \ if line("'\"") > 0 && line("'\"") <= line("$") |

  219. \ exe " normal g`\"" |

  220. \ endif

  221. endif "has("autocmd")

  222. " F5编译和运行C程序,F6编译和运行C++程序

  223. " 请注意,下述代码在windows下使用会报错

  224. " 需要去掉./这两个字符

  225. " C的编译和运行

  226. map <F5> :call CompileRunGcc()<CR>

  227. func! CompileRunGcc()

  228. exec "w"

  229. exec "!gcc % -o %<"

  230. exec "! ./%<"

  231. endfunc

  232. " C++的编译和运行

  233. map <F6> :call CompileRunGpp()<CR>

  234. func! CompileRunGpp()

  235. exec "w"

  236. exec "!g++ % -o %<"

  237. exec "! ./%<"

  238. endfunc

  239. " 能够漂亮地显示.NFO文件

  240. set encoding=utf-8

  241. function! SetFileEncodings(encodings)

  242. let b:myfileencodingsbak=&fileencodings

  243. let &fileencodings=a:encodings

  244. endfunction

  245. function! RestoreFileEncodings()

  246. let &fileencodings=b:myfileencodingsbak

  247. unlet b:myfileencodingsbak

  248. endfunction

  249. au BufReadPre *.nfo call SetFileEncodings('cp437')|set ambiwidth=single au BufReadPost *.nfo call RestoreFileEncodings()

  250. " 高亮显示普通txt文件(需要txt.vim脚本)

  251. au BufRead,BufNewFile * setfiletype txt

  252. " 用空格键来开关折叠

  253. set foldenable

  254. set foldmethod=manual

  255. nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc':'zo')<CR>

  256. " minibufexpl插件的一般设置

  257. let g:miniBufExplMapWindowNavVim = 1

  258. let g:miniBufExplMapWindowNavArrows = 1

  259. let g:miniBufExplMapCTabSwitchBufs = 1

  260. let g:miniBufExplModSelTarget = 1

上面的是安装的有用vim插件。相信读者能完成到这一步,对于如何增删定制插件已经成竹在胸了。:)


以上是关于Cygwin环境下vim配置的主要内容,如果未能解决你的问题,请参考以下文章

cygwin配置git

windows下安装cygwin环境并配置gcc环境

Cygwin下安装fugitive.vim插件时vim启动极慢

cygwin与vim配置

vim代码片段插件ultisnips的使用

win10下安装Cygwin配置gcc编译环境