core.vim 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. " 关闭 vi 兼容模式
  2. set nocompatible
  3. " 设置文件编码和内部编码
  4. set fileencoding=utf8 encoding=utf8
  5. " 禁止产生备份文件
  6. set nobackup
  7. " 当文件在外部发生更改时,自动读取更改后的内容
  8. set autoread
  9. " 保存文件时,禁止在文件底部添加新行
  10. set nofixendofline
  11. " 当读取/写入文件时使用的 <EOL>,Windows 默认使用 dos,Unix 和 Mac 默认使用 unix
  12. set fileformat=dos
  13. " 当创建新文件或读取文件时会尝试使用的换行规则
  14. set fileformats=unix,dos,mac
  15. " 允许在哪些地方退格(自动缩进、行尾、插入模式光标处)
  16. set backspace=indent,eol,start
  17. " 缩进空格数、Tab 代表的空格数、插入 Tab 时插入的空格数、Tab 展开(使用空格替代 Tab)
  18. set shiftwidth=2 tabstop=2 softtabstop=2 expandtab
  19. " 自动缩进,创建新行时沿用上一行的缩进
  20. set autoindent
  21. " 增量搜索,每次键入字符时进行实时匹配
  22. set incsearch
  23. " 对于多按键操作,在屏幕底部显示键入的命令
  24. set showcmd
  25. " 开启行号
  26. set number
  27. " 显示光标所在的行和列
  28. set ruler
  29. " 保存 50 个命令行内容
  30. set history=50
  31. " 禁止响铃及闪屏
  32. au GUIEnter * set vb t_vb=
  33. " 使用逗号作为映射前导符
  34. let mapleader = ","
  35. " 使用垂直窗口打开帮助内容
  36. autocmd FileType help wincmd L
  37. filetype plugin indent on
  38. " 如果操作系统是 Windows 32位或64位
  39. if has("win32")
  40. let g:gvim_fullscreen_lib = $VIMRUNTIME . '/../vimfiles/dll/gvimfullscreen.dll'
  41. " 如果操作系统是 Windows 64位
  42. if has("win64")
  43. let g:gvim_fullscreen_lib = $VIMRUNTIME . '/../vimfiles/dll/gvimfullscreen_x64.dll'
  44. endif
  45. nnoremap <F11> :call libcallnr(g:gvim_fullscreen_lib, "ToggleFullScreen", 0)<CR>
  46. inoremap <F11> <ESC>:call libcallnr(g:gvim_fullscreen_lib, "ToggleFullScreen", 0)<CR>a
  47. endif
  48. " 在图形化环境中运行
  49. if has("gui_running")
  50. " 去除所有图形界面元素
  51. set guioptions=
  52. " 设置窗口大小
  53. set lines=36 columns=128
  54. " 设置启动时窗口左上角的显示位置
  55. winpos 800 400
  56. " 在图形化环境使用 solarized 配色
  57. colorscheme solarized
  58. else
  59. " 在其他环境中使用 monokai 配色
  60. color monokai
  61. endif
  62. " 当支持彩色(色彩数量大于 2)且运行在图形化环境时,打开语法高亮和搜索高亮
  63. if &t_Co > 2 || has("gui_running")
  64. syntax on
  65. set hlsearch
  66. endif
  67. if has("autocmd")
  68. autocmd BufReadPost *
  69. \ if line("'\"") > 1 && line("'\"") <= line("$") |
  70. \ exe "normal! g`\"" |
  71. \ endif
  72. endif
  73. " 设置字体
  74. set guifont=Consolas:h14:cANSI:qDRAFT
  75. " 设置宽字符字体
  76. set guifontwide=Microsoft_Yahei_Mono:h14:cANSI:qDRAFT
  77. " 切换 Tab 代表的空格数
  78. function ToggleTabWidth()
  79. if &shiftwidth == 4
  80. let width = 2
  81. else
  82. let width = 4
  83. endif
  84. exe "set shiftwidth=" . width . " tabstop=" . width . " softtabstop=" . width . " expandtab"
  85. endfunction
  86. " 切换字体
  87. function ToggleFont()
  88. if &guifont == 'fixedsys'
  89. exec "set guifont=Consolas:h14:cANSI:qDRAFT"
  90. else
  91. exec "set guifont=fixedsys"
  92. endif
  93. endfunction
  94. " 打开/关闭行与列的高亮
  95. function ToggleCrossHighlight()
  96. if &cursorline == 0
  97. exec "set cursorline"
  98. exec "set cursorcolumn"
  99. else
  100. exec "set nocursorline"
  101. exec "set nocursorcolumn"
  102. endif
  103. endfunction
  104. " ================================================
  105. " 全局快捷键
  106. " ================================================
  107. " 保存文件
  108. noremap <F1> :write<CR>
  109. inoremap <F1> <ESC>:write<CR>
  110. " 打开/关闭目录
  111. " nerdtree.vim
  112. noremap <silent> <F2> :NERDTreeToggle<CR>
  113. " 打开/关闭日历
  114. " calendar.vim
  115. nnoremap <silent> <F3> :call ToggleCalendar()<CR>
  116. " 打开/关闭代码结构
  117. " tagbar.vim
  118. nnoremap <silent> <F12> :TagbarToggle<CR>
  119. " 调整当前窗口尺寸
  120. nnoremap <silent> <S-F11> :vertical resize -2<CR>
  121. nnoremap <silent> <S-F12> :vertical resize +2<CR>
  122. nnoremap <silent> <M-S-F11> :resize -2<CR>
  123. nnoremap <silent> <M-S-F12> :resize +2<CR>
  124. inoremap <silent> <S-F11> <ESC>:vertical resize -2<CR>a
  125. inoremap <silent> <S-F12> <ESC>:vertical resize +2<CR>a
  126. inoremap <silent> <M-S-F11> <ESC>:resize -2<CR>a
  127. inoremap <silent> <M-S-F12> <ESC>:resize +2<CR>a
  128. " 打开/关闭表格模式
  129. " vim-table-mode.vim
  130. nnoremap <leader>ttm :TableModeToggle<CR>
  131. " 打开/关闭 GitGutter
  132. " vim-gitgutter.vim
  133. nnoremap <leader>tgg :GitGutterToggle<CR>
  134. " 打开 Colorizer
  135. " colorizer.vim
  136. nnoremap <leader>tch :ColorHighlight<CR>
  137. " 关闭 Colorizer
  138. " colorizer.vim
  139. nnoremap <leader>tcc :ColorClear<CR>
  140. " 编辑配置文件
  141. nnoremap <leader>ev :vsplit $VIM/vimfiles/config/core.vim<CR>
  142. " 使配置文件生效
  143. nnoremap <silent> <leader>sv :source $VIM/vimfiles/config/core.vim<CR>
  144. " 新建标签页
  145. nnoremap <C-T> :tabnew<CR>
  146. inoremap <C-T> <ESC>:tabnew<CR>
  147. " 切换标签页
  148. nnoremap <C-PageUp> :tabprevious<CR>
  149. inoremap <C-PageUp> <ESC>:tabprevious<CR>
  150. nnoremap <C-PageDown> :tabnext<CR>
  151. inoremap <C-PageDown> <ESC>:tabnext<CR>
  152. " 打开/关闭搜索高亮
  153. nnoremap <silent> <leader>th :set nohlsearch!<CR>
  154. " 上下移动时,将长行当作断行对待
  155. nnoremap j gj
  156. nnoremap k gk
  157. " 打开/关闭拼写检查
  158. nnoremap <silent> <leader>ts :setlocal spell!<CR>
  159. " 跳到下一处错误
  160. nnoremap <leader>sn ]s
  161. " 跳到上一处错误
  162. nnoremap <leader>sp [s
  163. " 将当前词加入词典
  164. nnoremap <leader>sa zg
  165. " 为当前错误提供可能的正确选项
  166. nnoremap <leader>ss z=
  167. " 关闭当前文件/标签页
  168. nnoremap <silent> <leader>q :q<CR>
  169. " 插入模式模仿 Emacs 快捷键
  170. inoremap <C-F> <RIGHT>
  171. inoremap <C-B> <LEFT>
  172. inoremap <C-N> <DOWN>
  173. inoremap <C-P> <UP>
  174. inoremap <C-E> <END>
  175. inoremap <C-A> <HOME>
  176. " 快速跳转到其他窗口
  177. noremap <C-J> <C-W>j
  178. noremap <C-K> <C-W>k
  179. noremap <C-L> <C-W>l
  180. noremap <C-H> <C-W>h
  181. " 时间与日期展开
  182. iab xtime <C-R>=strftime("%Y-%m-%d %H:%M:%S")<CR>
  183. iab xdate <C-R>=strftime("%Y-%m-%d")<CR>
  184. " ================================================
  185. " Windows 相关
  186. " ================================================
  187. if has("clipboard")
  188. " 剪切
  189. vnoremap <C-X> "+x
  190. vnoremap <S-Del> "+x
  191. " 复制
  192. vnoremap <C-C> "+y
  193. vnoremap <C-Insert> "+y
  194. " 粘贴
  195. map <C-V> "+gP
  196. map <S-Insert> "+gP
  197. cmap <C-V> <C-R>+
  198. cmap <S-Insert> <C-R>+
  199. endif
  200. " 全选
  201. noremap <C-A> gggH<C-O>G
  202. inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
  203. cnoremap <C-A> <C-C>gggH<C-O>G
  204. onoremap <C-A> <C-C>gggH<C-O>G
  205. snoremap <C-A> <C-C>gggH<C-O>G
  206. xnoremap <C-A> <C-C>ggVG
  207. " ================================================
  208. " 插件
  209. " ================================================
  210. " 启用 pathogen 插件
  211. execute pathogen#infect()
  212. source $VIMRUNTIME/../vimfiles/config/calendar.vim
  213. source $VIMRUNTIME/../vimfiles/config/lightline.vim
  214. source $VIMRUNTIME/../vimfiles/config/nerdtree.vim
  215. source $VIMRUNTIME/../vimfiles/config/tagbar.vim
  216. source $VIMRUNTIME/../vimfiles/config/colorizer.vim
  217. source $VIMRUNTIME/../vimfiles/config/nerdcommenter.vim
  218. source $VIMRUNTIME/../vimfiles/config/vim-gitgutter.vim
  219. source $VIMRUNTIME/../vimfiles/config/vim-markdown.vim
  220. source $VIMRUNTIME/../vimfiles/config/vim-table-mode.vim
  221. source $VIMRUNTIME/../vimfiles/config/vim-fugitive.vim
  222. source $VIMRUNTIME/../vimfiles/config/coc.nvim.vim