vimrc 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. set runtimepath=~/.vim,/home/xaionaro/.vim,/etc/vim,$VIMRUNTIME
  2. " To fix problems with arrow-keys in INSERT-mode
  3. set nocompatible
  4. " To be able to erase EOL using backspace
  5. set backspace=indent,eol,start
  6. " кодировка по-умолчанию
  7. set encoding=utf-8
  8. " фикс для русских клавиш
  9. "set langmap=йq,цw,уe,кr,еt,нy,гu,шi,щo,зp,х[,ъ],фa,ыs,вd,аf,пg,рh,оj,лk,дl,ж\\;,э',яz,чx,сc,мv,иb,тn,ьm,б\\,,ю.,ё`,ЙQ,ЦW,УE,КR,ЕT,НY,ГU,ШI,ЩO,ЗP,Х{,Ъ},ФA,ЫS,ВD,АF,ПG,РH,ОJ,ЛK,ДL,Ж:,Э\\",ЯZ,ЧX,СC,МV,ИB,ТN,ЬM,Б<,Ю>,Ё~
  10. " маркер границы
  11. set textwidth=80
  12. set colorcolumn=50,72,80,120
  13. set textauto
  14. if !&diff
  15. " подсвечивать синтаксис
  16. syntax enable
  17. endif
  18. " показывать спец. символы
  19. set list
  20. set list listchars=tab:>.,eol:¶
  21. " определять тип файла автоматически, загружать плагины
  22. filetype plugin on
  23. filetype indent on
  24. " сворачивать по синтаксису
  25. set foldmethod=syntax
  26. set nofoldenable
  27. " автоматически менять каталог на текущий
  28. "set autochdir
  29. " хранить swap в отдельном каталоге
  30. set directory=/tmp/
  31. " меньше приоритета бинарным файлам при автодополнении
  32. set suffixes+=.png,.gif,.jpg,.jpeg,.ico
  33. " перечитывать изменённые файлы автоматически
  34. set autoread
  35. " использовать больше цветов в терминале
  36. set t_Co=256
  37. " цветова схема
  38. if (!has('gui_running') && filereadable(expand("$HOME/.vim/plugin/guicolorscheme.vim")))
  39. " Use the guicolorscheme plugin to makes 256-color or 88-color
  40. " terminal use GUI colors rather than cterm colors.
  41. runtime! plugin/guicolorscheme.vim
  42. " цвет всплывающего окна
  43. colorscheme kate
  44. else
  45. " For 8-color 16-color terminals or for gvim, just use the
  46. " regular :colorscheme command.
  47. "colorscheme kate
  48. colorscheme dark
  49. " set background=dark
  50. set guifont=Monospace\ 11
  51. " цвет всплывающего окна
  52. endif
  53. highlight Pmenu guibg=gray guifg=black gui=bold ctermbg=blue ctermfg=black
  54. " наследовать отступы предыдущей строки
  55. set autoindent
  56. " умные отступы на основе синтаксиса
  57. set smartindent
  58. " показывать строку с позицией курсора
  59. set ruler
  60. " Disabled due to high CPU load
  61. "set cursorline
  62. " показывать номера строк ...
  63. set number
  64. " ... в 4 символа минимум
  65. set numberwidth=3
  66. " показывать совпадающие скобки для HTML-тегов
  67. set matchpairs+=<:>
  68. " показывать строку вкладок всегда
  69. set showtabline=2
  70. " показывать строку статуса всегда
  71. set laststatus=2
  72. " использовать табуляцию в 4 пробела ...
  73. set tabstop=4
  74. " ... для мягких табуляций ...
  75. set softtabstop=4
  76. " ... и сдвигов строк
  77. set shiftwidth=4
  78. " удалять лишние пробелы при отступе
  79. set shiftround
  80. " использовать инкрементальный поиск
  81. set incsearch
  82. " использовать подсветку поиска
  83. set hlsearch
  84. " игнорировать регистр при поиске ...
  85. set ignorecase
  86. " ... если поисковый запрос в нижнем регистре
  87. set smartcase
  88. "Подсвечиваем все что можно подсвечивать
  89. let python_highlight_all = 1
  90. " более удобное передвижение внутри перенесенной строки
  91. nnoremap j gj
  92. nnoremap k gk
  93. vnoremap j gj
  94. vnoremap k gk
  95. "nnoremap <Down> gj
  96. "nnoremap <Up> gk
  97. "vnoremap <Down> gj
  98. "vnoremap <Up> gk
  99. "inoremap <Down> <C-o>gj
  100. "inoremap <Up> <C-o>gk
  101. "" порядок перебора кодировок
  102. set fileencodings=utf-8,windows-1251,iso-8859-15,koi8-r
  103. " включить перенос строк
  104. set wrap
  105. " символ переноса строки
  106. "set showbreak=____
  107. set showbreak=
  108. " переключение режима отступов при вставке
  109. set paste
  110. set pastetoggle=<F12>
  111. " отображать режим
  112. set showmode
  113. if has("gui_running")
  114. " использовать контекстное меню
  115. "set mousemodel=popup
  116. set mousemodel=extend
  117. " разрешить фокусу прыгать за мышью между окнами
  118. set mousefocus
  119. " не скрывать указатель при печати
  120. set nomousehide
  121. " сглаживание
  122. set antialias
  123. else
  124. " цветовая схема
  125. "colorscheme google
  126. "set background=light
  127. endif
  128. " настройки vim+latex
  129. set grepprg=grep\ -nH\ $*
  130. let g:tex_flavor='latex'
  131. " настройка проверки орфографии
  132. setlocal spell spelllang=ru_ru,en_us
  133. set nospell
  134. " использование мыши
  135. set mouse=a
  136. " настройки автодоплнения omnicomplete
  137. "set ofu=syntaxcomplete#Complete
  138. " дополнять после точки
  139. let OmniCpp_MayCompleteDot = 1
  140. " дополнять после ->
  141. let OmniCpp_MayCompleteArrow = 1
  142. " дополнять после ::
  143. let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
  144. " выбирать первый элемент в списке, но не вставлять
  145. let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
  146. " показывать прототип функции
  147. let OmniCpp_ShowPrototypeInAbbr = 1
  148. "Настройка omnicomletion для Python (а так же для js, html и css)
  149. autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
  150. autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
  151. autocmd FileType css set omnifunc=csscomplete#CompleteCSS
  152. " путь к тегам
  153. set tags+=~/.vim/tags;./tags
  154. " автоматическое выставление флагов для исполняемых файлов
  155. function ModeChange()
  156. if getline(1) =~ "^#!"
  157. if getline(1) =~ "/bin/"
  158. silent !chmod a+x <afile>
  159. endif
  160. endif
  161. endfunction
  162. "Вызываем SnippletsEmu(см. дальше в топике) по ctrl-j
  163. "вместо tab по умолчанию (на табе автокомплит)
  164. let g:snippetsEmu_key = "<C-j>"
  165. " автоматическая генерация тегов при записи файла
  166. function GenerateTags()
  167. if expand("%:e") == "cpp" || expand("%:e") == "c" || expand("%:e") == "h"
  168. let ctags = "!ctags --recurse --append --c++-kinds=+p --fields=+iaS --extra=+q -f tags *"
  169. silent exec ctags
  170. unlet ctags
  171. endif
  172. endfunction
  173. " автоматическая генерация cscope
  174. function GenerateCScope()
  175. if expand("%:e") == "cpp" || expand("%:e") == "c" || expand("%:e") == "h"
  176. let cscope = "!cscope -Rb *"
  177. silent exec cscope
  178. unlet cscope
  179. endif
  180. endfunction
  181. " загрузка cscope при возможности
  182. function LoadCScope()
  183. if filereadable("cscope.out")
  184. cs add cscope.out
  185. endif
  186. endfunction
  187. au BufWritePost * call ModeChange()
  188. "au BufWritePost * call GenerateTags()
  189. "au BufWritePost * call GenerateCScope()
  190. "au BufRead * call LoadCScope()
  191. au BufWinLeave * silent! mkview
  192. "au BufWinEnter * silent! loadview
  193. command! Cscope :call GenerateTags()
  194. " автоматическое закрытие комментариев
  195. au FileType c,cpp,h,hpp inoremap /*<Space> /* */<Esc>3ha
  196. " подсветка ftl
  197. au! BufNewFile,BufRead *.ftl setfiletype ftl
  198. "au BufNewFile,BufRead *.json.ftl setfiletype ftl
  199. "au BufNewFile,BufRead *.xml.ftl setfiletype ftl
  200. " автоматически конвертировать unicode в ascii
  201. let g:ucs_encode_java = 1
  202. " NERDTree
  203. "autocmd VimEnter * NERDTree
  204. "autocmd BufEnter * NERDTreeMirror
  205. "autocmd VimEnter * wincmd w
  206. map <TAB> :wincmd w<CR>
  207. "map <C-Q> :wincmd k<CR>
  208. "map <C-J> :wincmd j<CR>
  209. map <F2> :NERDTreeTabsToggle<CR>
  210. "vmap <F2> <esc>:NERDTreeToggle<cr>
  211. "imap <F2> <esc>:NERDTreeToggle<cr>
  212. " Открытие/закрытие окна NERD_Tree (plugin-NERD_Tree)
  213. menu <silent> Plugin.File\ Explorer<tab><ESC>:cclose<CR> :NERDTreeToggle<cr>
  214. imenu <silent> Plugin.File\ Explorer<tab><ESC>:cclose<CR> <ESC>:NERDTreeToggle<cr>
  215. let NERDTreeShowHidden=1
  216. let NERDTreeHighlightCursorline=1
  217. let NERDTreeWinPos = 'right'
  218. let NERDTreeShowBookmarks = 1
  219. let NERDTreeIgnore = ['\~$', '*.pyc', '*.pyo']
  220. let NERDChristmasTree = 0
  221. let g:nerdtree_tabs_open_on_gui_startup = 0
  222. let g:nerdtree_tabs_open_on_console_startup = 0
  223. "au VimEnter * NERDTreeFind
  224. " Запустить make вызывается нажатием F5
  225. set makeprg=cd\ build\ &&\ make\ debug
  226. imap <F5> <ESC>:wa<CR>:make<CR>
  227. nmap <F5> :wa<CR>:make<CR>
  228. let g:copened = 0
  229. function! CToggle()
  230. if g:copened
  231. cclose
  232. let g:copened = 0
  233. else
  234. copen 10
  235. let g:copened = 1
  236. endif
  237. endfunction
  238. "imap <esc>:NERDTreeToggle<cr> <ESC>:cclose<CR>
  239. "nmap :NERDTreeToggle<cr> :cclose<CR>
  240. imap <f8> <ESC>:call CToggle()<CR>
  241. nmap <f8> :call CToggle()<CR>
  242. " Перейти к следующей ошибке
  243. imap <F6> <ESC>:cnext<CR>
  244. nmap <F6> :cnext<CR>
  245. " Перейти к предыдущей ошибке
  246. "imap <F6> <ESC>:cprev<CR>
  247. "nmap <F6> :cprev<CR>
  248. map <A-q> :q!<CR>
  249. map <A-w> :w!<CR>
  250. map <C-d> :q!<CR>
  251. map <C-w> :w!<CR>
  252. " Uncomment the following to have Vim jump to the last position when
  253. " reopening a file
  254. if has("autocmd")
  255. au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
  256. \| exe "normal g'\"" | endif
  257. endif
  258. "set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
  259. set statusline=%<%F%h%m%r%h%w%y\ %{&ff}\ \[%{strftime(\"%Y-%m-%d\ %H:%M:%S\")}\]\ enc:%{&enc}\ ascii:%b%=\ %c%V(%o)\ %l\/%L\ %P
  260. " Disabled due to high CPU load
  261. "hi CursorLine ctermfg=white cterm=bold gui=bold
  262. "au InsertEnter * set cursorline
  263. "au InsertLeave * set nocursorline
  264. nmap <F3> <C-v>
  265. vmap <F3> y
  266. nmap <F4> V
  267. vmap <F4> y
  268. "map <F7> [I:let nr = input("Which one: ")<Bar>exe "normal " . nr ."[\t"<CR>
  269. map <F10> :call DecorationsToggle()<CR>
  270. let g:decorationsEnabled = 1
  271. function! DecorationsToggle()
  272. if g:decorationsEnabled
  273. set nonumber
  274. set nolist
  275. set notextauto
  276. set textwidth=0
  277. set colorcolumn=0
  278. let g:decorationsEnabled = 0
  279. else
  280. set number
  281. set list
  282. set textwidth=80
  283. set colorcolumn=80
  284. set textauto
  285. let g:decorationsEnabled = 1
  286. endif
  287. endfunction
  288. " syntax/php.vim
  289. let php_sql_query=1
  290. let php_folding=0
  291. let php_special_functions=1
  292. let php_htmlInStrings=1
  293. let php_parent_error_close=1
  294. " проверка скобок
  295. set showmatch
  296. set matchtime=1
  297. " Disable matchparen.vim due to high CPU load
  298. "let g:loaded_matchparen = 0
  299. function ToggleMatchParen()
  300. if exists("g:loaded_matchparen") && g:loaded_matchparen == 1
  301. windo 3match none
  302. unlet! g:loaded_matchparen
  303. au! matchparen
  304. else
  305. unlet! g:loaded_matchparen
  306. runtime plugin/matchparen.vim
  307. windo doau CursorMoved
  308. endif
  309. endfunction
  310. map <F9> :call ToggleMatchParen()<CR>
  311. " хранить резервные копии файлов ...
  312. set backup
  313. " ... в отдельном каталоге
  314. "set backupdir=~/.vim/backup/
  315. function! BackupDir()
  316. " определим каталог для сохранения резервной копии
  317. let l:backupdir=$HOME.'/.vim/backup/'.
  318. \substitute(expand('%:p:h'), '^'.$HOME, '~', '')
  319. " если каталог не существует, создадим его рекурсивно
  320. if !isdirectory(l:backupdir)
  321. call mkdir(l:backupdir, 'p', 0700)
  322. endif
  323. " переопределим каталог для резервных копий
  324. let &backupdir=l:backupdir
  325. " переопределим расширение файла резервной копии
  326. let &backupext=strftime('~%Y-%m-%d~')
  327. endfunction
  328. autocmd! bufwritepre * call BackupDir()
  329. set tags=./tags;/
  330. "execute pathogen#infect('bundle/{}', '/etc/vim/bundle/{}')
  331. let g:rust_recommended_style = 0
  332. au BufNewFile,BufRead *.goT set filetype=go