.vimrc 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  1. " coding:utf-8
  2. set enc=utf8
  3. scriptencoding utf-8
  4. " ζ*'ヮ')ζ ζ(*'ヮ'リ+
  5. "
  6. if &compatible
  7. set nocompatible
  8. endif
  9. set ignorecase
  10. set smartcase
  11. set tabstop=2
  12. set expandtab
  13. set autoindent
  14. set backspace=2
  15. set wrapscan
  16. set showmatch
  17. set wildmenu
  18. set formatoptions+=mM
  19. set softtabstop=2
  20. set shiftwidth=2
  21. set fileencodings=utf-8,sjis,cp932,euc-jp,default,latin
  22. set number
  23. set ruler
  24. set nolist
  25. set wrap
  26. set laststatus=2
  27. set cmdheight=2
  28. set showcmd
  29. set title
  30. set hlsearch
  31. set list
  32. set listchars=tab:>-
  33. set ambiwidth=double
  34. colorscheme elflord
  35. if has('gui_running')
  36. colorscheme evening
  37. endif
  38. syntax on
  39. set updatetime=200
  40. " ファイル名に大文字小文字の区別がないシステム用の設定:
  41. " (例: DOS/Windows/MacOS)
  42. "
  43. if filereadable($VIM . '/vimrc') && filereadable($VIM . '/ViMrC')
  44. " tagsファイルの重複防止
  45. set tags=./tags,tags
  46. endif
  47. " コンソールでのカラー表示のための設定(暫定的にUNIX専用)
  48. if has('unix') && !has('gui_running') && !has('nvim')
  49. let uname = system('uname')
  50. if uname =~? "linux"
  51. set term=builtin_linux
  52. elseif g:uname =~? 'freebsd'
  53. set term=builtin_cons25
  54. elseif g:uname =~? 'Darwin'
  55. set term=beos-ansi
  56. else
  57. set term=builtin_xterm
  58. endif
  59. endif
  60. " コンソール版で環境変数$DISPLAYが設定されていると起動が遅くなる件へ対応
  61. if !has('gui_running') && has('xterm_clipboard')
  62. set clipboard=exclude:cons\\\|linux\\\|cygwin\\\|rxvt\\\|screen
  63. endif
  64. " タブページの切り替えをWindowsのように
  65. " CTRL+Tab SHIFT+Tabで行うように.
  66. if v:version >= 700
  67. nnoremap <C-Tab> gt
  68. nnoremap <C-S-Tab> gT
  69. endif
  70. let g:vim_indent_cont = 2
  71. filetype off
  72. " プラグインが実際にインストールされるディレクトリ
  73. let s:dein_dir = expand('~/.cache/dein')
  74. " dein.vim 本体
  75. let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
  76. " dein.vim がなければ github から落としてくる
  77. if &runtimepath !~# '/dein.vim'
  78. if !isdirectory(s:dein_repo_dir)
  79. execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir
  80. endif
  81. execute 'set runtimepath^=' . fnamemodify(s:dein_repo_dir, ':p')
  82. endif
  83. " 設定開始
  84. if dein#load_state(s:dein_dir)
  85. call dein#begin(s:dein_dir)
  86. " プラグインリストを収めた TOML ファイル
  87. " 予め TOML ファイル(後述)を用意しておく
  88. let g:rc_dir = expand('~/dotfiles')
  89. let s:toml = g:rc_dir . '/dein.toml'
  90. let s:lazy_toml = g:rc_dir . '/dein_lazy.toml'
  91. " TOML を読み込み、キャッシュしておく
  92. call dein#load_toml(s:toml, {'lazy': 0})
  93. call dein#load_toml(s:lazy_toml, {'lazy': 1})
  94. " 設定終了
  95. call dein#end()
  96. call dein#save_state()
  97. endif
  98. filetype plugin indent on
  99. syntax enable
  100. " もし、未インストールものものがあったらインストール
  101. if dein#check_install()
  102. call dein#install()
  103. endif
  104. if has('clientserver')
  105. call singleton#enable()
  106. endif
  107. set ww+=h,l,>,<,[,]
  108. set mouse=a
  109. if !has('nvim')
  110. set ttymouse=xterm2
  111. set clipboard=unnamed
  112. endif
  113. " ,is: シェルを起動
  114. nnoremap <silent> ,is :VimShell<CR>
  115. " ,ipy: pythonを非同期で起動
  116. nnoremap <silent> ,ipy :VimShellInteractive python<CR>
  117. " ,irb: irbを非同期で起動
  118. nnoremap <silent> ,irb :VimShellInteractive irb<CR>
  119. " ,ss: 非同期で開いたインタプリタに現在の行を評価させる
  120. vmap <silent> ,ss :VimShellSendString<CR>
  121. " 選択中に,ss: 非同期で開いたインタプリタに選択行を評価させる
  122. nnoremap <silent> ,ss <S-v>:VimShellSendString<CR>
  123. " ,vs: vimshell
  124. nnoremap <silent> ,vs :tabnew +VimShell<CR>
  125. " ,vr: .vimrc
  126. nnoremap <silent> ,vr :tabnew ~/.vimrc<CR>:lcd<CR>
  127. nnoremap <silent> ,so :so ~/.vimrc<CR>
  128. nnoremap <silent> ,nu :tabnew +Unite\ neobundle/update<CR>
  129. nnoremap <silent> ,ll :tabnew +LingrLaunch<CR>
  130. nnoremap <silent> ,cw :cwindow<CR>
  131. nnoremap <Esc><Esc> :nohlsearch<CR><ESC>:HierStop<CR><ESC>
  132. nnoremap <silent> ,ts :<C-u>tab stj <C-R>=expand('<cword>')<CR><CR>
  133. map / <Plug>(incsearch-forward)
  134. map ? <Plug>(incsearch-backward)
  135. map g/ <Plug>(incsearch-stay)
  136. if dein#tap('neocomplcache')
  137. let g:neocomplcache_enable_at_startup = 1
  138. let g:neocomplcache_enable_smart_case = 1
  139. let g:neocomplcache_enable_camel_case_completion = 1
  140. let g:neocomplcache_enable_underbar_completion = 1
  141. let g:neocomplcache_min_syntax_length = 3
  142. let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
  143. let g:neocomplcache_keyword_patterns = get(g:, 'neocomplecache_keyword_patterns', {})
  144. let g:neocomplcache_keyword_patterns['default'] = '\h\w*'
  145. endif
  146. if dein#tap('neocomplete.vim')
  147. let g:neocomplete#enable_at_startup = 1
  148. let g:neocomplete#enable_smart_case = 1
  149. let g:neocomplete#enable_camel_case_completion = 1
  150. let g:neocomplete#enable_underbar_completion = 1
  151. let g:neocomplete#min_syntax_length = 3
  152. let g:neocomplete#lock_buffer_name_pattern = '\*ku\*'
  153. let g:neocomplete#keyword_patterns = get(g:, 'neocomplete#keyword_patterns', {})
  154. let g:neocomplete#keyword_patterns['default'] = '\h\w*'
  155. let g:neocomplete#force_omni_input_patterns = get(g:, 'neocomplete#force_omni_input_patterns', {})
  156. let g:neocomplete#sources#omni#input_patterns = get(g:, 'neocomplete#sources#omni#input_patterns', {})
  157. let g:neocomplete#text_mode_filetypes = {'tex': 1, 'plaintex': 1}
  158. let g:neocomplete#force_omni_input_patterns.cpp =
  159. \ '[^.[:digit:] *\t]\%(\.\|->\)\w*\|\h\w*::\w*'
  160. let g:neocomplete#sources#omni#input_patterns.ruby = '[^. *\t]\.\|\h\w*::'
  161. let g:neocomplete#sources#omni#input_patterns.cs = '[^.]\.\%(\u\{2,}\)\?'
  162. let g:neocomplete#sources#omni#input_patterns.php = '[^. \t]->\h\w*\|\h\w*::'
  163. inoremap <expr><C-g> neocomplete#undo_completion()
  164. inoremap <expr><C-l> neocomplete#complete_common_string()
  165. endif
  166. "let g:vimfiler_as_default_explorer = 1
  167. "let g:vimfiler_safe_mode_by_default = 0
  168. "let g:neocomplcache#sources#rsense#home_directory = '/opt/rsense-0.3/'
  169. let g:monster#completion#rcodetools#backend = 'async_rct_complete'
  170. let g:neosnippet#snippets_directory = '~/.vim/snippet,~/.cache/dein/honza/vim-snippets/snippets'
  171. let g:pdv_template_dir = $HOME . "/.hariti/bundle/pdv/templates_snip"
  172. "tabで補完候補の選択を行う
  173. imap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
  174. imap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<S-TAB>"
  175. imap <expr><CR> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<CR>"
  176. smap <expr><TAB> neosnippet#expandable_or_jumpable() ?
  177. \ "\<Plug>(neosnippet_expand_or_jump)"
  178. \: "\<TAB>"
  179. inoremap <buffer> <C-P> <ESC>:call pdv#DocumentWithSnip()<CR>i
  180. nnoremap <buffer> <C-P> :call pdv#DocumentWithSnip()<CR>
  181. let g:OmniSharp_server_type = 'roslyn'
  182. augroup vimrc
  183. autocmd!
  184. autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
  185. autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
  186. autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
  187. autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
  188. autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags
  189. autocmd FileType cs setlocal omnifunc=OmniSharp#Complete
  190. autocmd FileType clojure setlocal omnifunc=neoclojure#complete#omni
  191. autocmd FileType quickrun AnsiEsc
  192. autocmd BufNewFile,BufRead *.{md,mdwn,mkd,mkdn,mark*} setlocal filetype=markdown
  193. autocmd BufNewFile,BufRead *.gradle setlocal filetype=groovy
  194. autocmd BufNewFile,BufRead */Classes/*.{cpp,h,hpp} setlocal tags+=$HOME/ctags/cocos2dx.tags
  195. autocmd FileType php setlocal omnifunc=padawan#Complete noexpandtab wrap tabstop=4 shiftwidth=4 tags+=$HOME/ctags/php.tags
  196. autocmd FileType smarty setlocal noexpandtab wrap tabstop=4 shiftwidth=4 softtabstop=4 tags+=$HOME/ctags/php.tags
  197. autocmd FileType java setlocal noexpandtab wrap tabstop=4 shiftwidth=4
  198. autocmd FileType ruby setlocal tags+=$HOME/ctags/ruby.tags
  199. autocmd FileType c setlocal tags+=$HOME/ctags/c.tags
  200. autocmd FileType cpp setlocal path=.,C:/msys64/mingw64/include,C:/cocos2d-x-3.6/cocos
  201. autocmd FileType diff setlocal ts=4
  202. autocmd BufNewFile Gemfile Template Gemfile
  203. autocmd User DirvishEnter let b:dirvish.showhidden = 1
  204. augroup END
  205. let g:netrw_nogx = 1
  206. nmap gx <Plug>(openbrowser-smart-search)
  207. vmap gx <Plug>(openbrowser-smart-search)
  208. let g:Vimphpcs_Phpcscmd = expand('~/.config/composer/vendor/bin/phpcs')
  209. let g:quickrun_config = {}
  210. let g:quickrun_config = {
  211. \ '_' : {
  212. \ 'hook/close_unite_quickfix/enable_hook_loaded' : 1,
  213. \ 'hook/unite_quickfix/enable_failure' : 1,
  214. \ 'hook/close_quickfix/enable_exit' : 1,
  215. \ 'hook/close_buffer/enable_failure' : 1,
  216. \ 'hook/close_buffer/enable_empty_data' : 1,
  217. \ 'outputter' : 'multi:buffer:quickfix',
  218. \ 'hook/u_nya_/enable' : 1,
  219. \ 'hook/sweep/enable' : 0,
  220. \ 'outputter/buffer/split' : ':botright 15sp',
  221. \ 'outputter/buffer/running_mark' : 'バン(∩`・ω・)バンバンバンバン゙ン',
  222. \ 'runner' : 'vimproc',
  223. \ 'runner/vimproc/updatetime' : 40,
  224. \ 'runner/vimproc/sleep' : 0,
  225. \ }
  226. \ }
  227. let g:quickrun_config['markdown'] = {
  228. \ 'outputter': 'browser'
  229. \}
  230. let g:quickrun_config['ruby'] = {
  231. \ 'command': 'ruby',
  232. \ 'exec': '/usr/bin/env ruby %s',
  233. \ 'tempfile': '{tempname()}.rb'
  234. \}
  235. let g:quickrun_config['clojure/neoclojure'] = {
  236. \ 'type' : 'clojure/neoclojure',
  237. \ 'runner' : 'neoclojure',
  238. \ 'command' : 'dummy',
  239. \ 'tempfile' : '%{tempname()}.clj'
  240. \}
  241. let g:quickrun_config['cpp/gcc']= {
  242. \ 'cmdopt': '-std=c++1y -Wall'
  243. \ }
  244. let g:quickrun_config['cpp/msvc2013'] = {
  245. \ 'command' : 'cl',
  246. \ 'exec': ["%c %o %s /nologo /link 'Siv3D.lib' 'kernel32.lib' " .
  247. \ "'user32.lib' 'gdi32.lib' 'winspool.lib' 'comdlg32.lib'" .
  248. \ "'advapi32.lib' 'shell32.lib' 'ole32.lib' 'oleaut32.lib'" .
  249. \ "'uuid.lib' 'odbc32.lib' 'odbccp32.lib'", '%s:p:r.exe %a'],
  250. \ 'cmdopt' : '/EHsc',
  251. \ 'hook/output_encode/encoding': 'sjis',
  252. \ 'hook/vcvarsall/enable' : 1,
  253. \ 'hook/vcvarsall/bat' : shellescape($VS120COMNTOOLS . 'vsvars32.bat')
  254. \ }
  255. if executable(g:Vimphpcs_Phpcscmd)
  256. let g:quickrun_config['php/watchdogs_checker'] = {
  257. \ 'type' : 'watchdogs_checker/phpcs'
  258. \ }
  259. endif
  260. let g:quickrun_config['watchdogs_checker/_'] = {
  261. \ 'hook/close_quickfix/enable_exit': 1,
  262. \ 'hook/close_unite_quickfix/enable_exit' : 1,
  263. \ }
  264. if executable(g:Vimphpcs_Phpcscmd)
  265. let g:quickrun_config['watchdogs_checker/phpcs'] = {
  266. \ 'quickfix/errorformat': g:phpcs_errorformat,
  267. \ 'command' : g:Vimphpcs_Phpcscmd,
  268. \ 'cmdopt' : '--report=csv --standard=' . g:Vimphpcs_Standard,
  269. \ 'exec' : '%c %o %s:p',
  270. \ }
  271. endif
  272. let g:quickrun_config['watchdogs_checker/phpmd'] = {
  273. \ 'quickfix/errorformat': '%E%f:%l\s%#%m',
  274. \ 'command' : '$HOME/.composer/vendor/bin/phpmd',
  275. \ 'cmdopt' : 'text codesize,design,unusedcode,naming',
  276. \ 'exec' : '%c %s:p %o',
  277. \ }
  278. let g:watchdogs_check_BufWritePost_enable = 1
  279. let g:watchdogs_check_BufWritePost_enables = {
  280. \ 'cpp' : 0,
  281. \ 'php' : 1,
  282. \ }
  283. let g:watchdogs_check_CursorHold_enable = 1
  284. let g:watchdogs_check_CursorHold_enables = {
  285. \ 'cpp' : 0,
  286. \ 'php' : 1,
  287. \ }
  288. if dein#tap('watchdocs.vim')
  289. call watchdogs#setup(g:quickrun_config)
  290. endif
  291. let g:lingr_vim_user = 'raa0121'
  292. let g:J6uil_display_offline = 0
  293. let g:J6uil_display_online = 0
  294. let g:J6uil_echo_presence = 1
  295. let g:J6uil_display_icon = 0
  296. let g:J6uil_display_interval = 0
  297. let g:J6uil_updatetime = 1000
  298. let g:calendar_google_calendar = 1
  299. let g:calendar_google_task = 1
  300. let g:marching_clang_command_option='-std=c++1y'
  301. let g:marching_enable_neocomplete = 1
  302. if has('win32')
  303. let g:marching_clang_command = 'C:/msys64/mingw64/bin/clang'
  304. let g:marching_include_paths = ['C:/msys64/mingw64/include/c++/4.9.2/',
  305. \ 'C:/cocos2d-x-3.6/cocos/']
  306. let g:snowdrop#libclang_path = 'C:/msys64/mingw64/bin'
  307. else
  308. let g:marching_clang_command = '/usr/bin/clang'
  309. let g:marching_include_paths = ['/usr/include/c++/4.8.2/']
  310. let g:snowdrop#libclang_path='/usr/lib'
  311. end
  312. let g:conoline_auto_enable = 1
  313. let g:unite_enable_start_insert = 0
  314. let g:unite_source_directory_mru_long_limit = 3000
  315. let g:unite_source_file_mru_filename_format = ''
  316. let g:unite_source_file_mru_long_limit = 3000
  317. let g:unite_source_history_yank_enable = 1
  318. let g:unite_split_rule = 'botright'
  319. let g:unite_winheight = 15
  320. if executable('ag')
  321. let g:unite_source_grep_command = 'ag'
  322. let g:unite_source_grep_default_opts = '--nogroup --nocolor --column'
  323. let g:unite_source_grep_recursive_opt = ''
  324. endif
  325. nnoremap <silent> ,g :<C-u>Unite grep:. -buffer-name=search-buffer<CR>
  326. nnoremap <silent> ,cg :<C-u>Unite grep:. -buffer-name=search-buffer<CR><C-R><C-W>
  327. nnoremap <silent> ,r :<C-u>UniteResume search-buffer<CR>
  328. if dein#tap('vim-textobj-user')
  329. call textobj#user#plugin('datetime', {
  330. \ 'date': {
  331. \ 'pattern': '\<\d\d\d\d-\d\d-\d\d\>',
  332. \ 'select': ['ad', 'id'],
  333. \ },
  334. \ 'time': {
  335. \ 'pattern': '\<\d\d:\d\d:\d\d\>',
  336. \ 'select': ['at', 'it'],
  337. \ },
  338. \ })
  339. endif
  340. set diffexpr=unified_diff#diffexpr()
  341. " configure with the followings (default values are shown below)
  342. let g:unified_diff#executable = 'git'
  343. let g:unified_diff#arguments = [
  344. \ 'diff', '--no-index', '--no-color', '--no-ext-diff', '--unified=0',
  345. \ ]
  346. let g:unified_diff#iwhite_arguments = [
  347. \ '--ignore--all-space',
  348. \ ]
  349. augroup plugin-lingr-vim
  350. autocmd!
  351. autocmd FileType lingr-messages nmap <silent> <buffer> t <Plug>(lingr-messages-show-say-buffer)
  352. autocmd FileType lingr-say let &syntax='clojure'
  353. augroup END
  354. function! s:SID_PREFIX()
  355. return matchstr(expand('<sfile>'), '<SNR>\d\+_')
  356. endfunction
  357. set titlelen=100
  358. set guioptions-=e
  359. autocmd vimrc BufEnter * let &titlestring = '%{' . s:SID_PREFIX() . 'titlestring()}'
  360. autocmd vimrc User plugin-lingr-unread let &titlestring = '%{' . s:SID_PREFIX() . 'titlestring()}'
  361. if !has('gui_running')
  362. set t_Co=256
  363. endif
  364. if exists('$TMUX') || exists('$WINDOW')
  365. set t_ts=k
  366. set t_fs=\
  367. endif
  368. function! s:titlestring()
  369. if &filetype =~? '^lingr'
  370. let &titlestring = 'lingr: ' . lingr#unread_count()
  371. else
  372. let &titlestring = bufname('')
  373. endif
  374. endfunction
  375. " tabline
  376. set showtabline=2 " always show tabline
  377. let g:lightline = {
  378. \ 'colorscheme': 'wombat',
  379. \ 'active': {
  380. \ 'left': [
  381. \ ['mode', 'paste'],
  382. \ ['fugitive', 'gitgutter', 'filename'],
  383. \ ],
  384. \ 'right': [
  385. \ ['lineinfo', 'syntastic'],
  386. \ ['percent'],
  387. \ ['charcode', 'fileformat', 'fileencoding', 'filetype'],
  388. \ ]
  389. \ },
  390. \ 'component_function': {
  391. \ 'modified': 'MyModified',
  392. \ 'readonly': 'MyReadonly',
  393. \ 'fugitive': 'MyFugitive',
  394. \ 'filename': 'MyFilename',
  395. \ 'fileformat': 'MyFileformat',
  396. \ 'filetype': 'MyFiletype',
  397. \ 'fileencoding': 'MyFileencoding',
  398. \ 'mode': 'MyMode',
  399. \ 'syntastic': 'SyntasticStatuslineFlag',
  400. \ 'charcode': 'MyCharCode',
  401. \ 'gitgutter': 'MyGitGutter',
  402. \ },
  403. \ 'separator': { 'left': "\ue0c0", 'right': "\ue0c2" },
  404. \ 'subseparator': { 'left': "\ue0c1", 'right': "\ue0c3" }
  405. \ }
  406. function! MyModified()
  407. return &ft =~? 'help\|vimfiler\|gundo' ? '' : &modified ? '+' : &modifiable ? '' : '-'
  408. endfunction
  409. function! MyReadonly()
  410. return &ft !~? 'help\|vimfiler\|gundo' && &ro ? '\u2b64' : ''
  411. endfunction
  412. function! MyFilename()
  413. return ('' !=? MyReadonly() ? MyReadonly() . ' ' : '') .
  414. \ (&ft ==? 'vimfiler' ? vimfiler#get_status_string() :
  415. \ &ft ==? 'unite' ? unite#get_status_string() :
  416. \ &ft ==? 'vimshell' ? substitute(b:vimshell.current_dir,expand('~'),'~','') :
  417. \ '' !=? expand('%:t') ? expand('%:t') : '[No Name]') .
  418. \ ('' !=? MyModified() ? ' ' . MyModified() : '')
  419. endfunction
  420. function! MyFugitive()
  421. try
  422. if &ft !~? 'vimfiler\|gundo' && exists('*fugitive#head')
  423. let l:_ = fugitive#head()
  424. return strlen(l:_) ? '⭠ '. l:_ : ''
  425. endif
  426. catch
  427. endtry
  428. return ''
  429. endfunction
  430. function! MyFileformat()
  431. return winwidth('.') > 70 ? &fileformat : ''
  432. endfunction
  433. function! MyFiletype()
  434. return winwidth('.') > 70 ? (strlen(&filetype) ? &filetype : 'no ft') : ''
  435. endfunction
  436. function! MyFileencoding()
  437. return winwidth('.') > 70 ? (strlen(&fenc) ? &fenc : &enc) : ''
  438. endfunction
  439. function! MyMode()
  440. return winwidth('.') > 60 ? lightline#mode() : ''
  441. endfunction
  442. function! MyGitGutter()
  443. if ! exists('*GitGutterGetHunkSummary')
  444. \ || ! get(g:, 'gitgutter_enabled', 0)
  445. \ || winwidth('.') <= 90
  446. return ''
  447. endif
  448. let l:symbols = [
  449. \ g:gitgutter_sign_added . ' ',
  450. \ g:gitgutter_sign_modified . ' ',
  451. \ g:gitgutter_sign_removed . ' '
  452. \ ]
  453. let l:hunks = GitGutterGetHunkSummary()
  454. let l:ret = []
  455. for l:i in [0, 1, 2]
  456. if l:hunks[l:i] > 0
  457. call add(l:ret, l:symbols[l:i] . l:hunks[l:i])
  458. endif
  459. endfor
  460. return join(l:ret, ' ')
  461. endfunction
  462. " https://github.com/Lokaltog/vim-powerline/blob/develop/autoload/Powerline/Functions.vim
  463. function! MyCharCode()
  464. if winwidth('.') <= 70
  465. return ''
  466. endif
  467. " Get the output of :ascii
  468. redir => ascii
  469. silent! ascii
  470. redir END
  471. if match(ascii, 'NUL') != -1
  472. return 'NUL'
  473. endif
  474. " Zero pad hex values
  475. let l:nrformat = '0x%02x'
  476. let l:encoding = (&fenc ==? '' ? &enc : &fenc)
  477. if l:encoding ==? 'utf-8'
  478. " Zero pad with 4 zeroes in unicode files
  479. let l:nrformat = '0x%04x'
  480. endif
  481. " Get the character and the numeric value from the return value of :ascii
  482. " This matches the two first pieces of the return value, e.g.
  483. " "<F> 70" => char: 'F', nr: '70'
  484. let [l:str, l:char, l:nr; l:rest] = matchlist(ascii, '\v\<(.{-1,})\>\s*([0-9]+)')
  485. " Format the numeric value
  486. let l:nr = printf(l:nrformat, l:nr)
  487. return "'". l:char ."' ". l:nr
  488. endfunction
  489. let &tabline = '%!' . s:SID_PREFIX() . 'tabline()'
  490. function! s:tabline()
  491. " show each tab
  492. let l:s = ''
  493. for l:i in range(1, tabpagenr('$'))
  494. let l:list = tabpagebuflist(l:i)
  495. let l:nr = tabpagewinnr(l:i)
  496. let l:current_tabnr = tabpagenr()
  497. "let title = bufname('')
  498. if l:i ==? l:current_tabnr
  499. let l:title = fnamemodify(getcwd(), ':t') . '/'
  500. "let title = bufname('')
  501. else
  502. let l:title = fnamemodify(gettabvar(l:i, 'cwd'), ':t') . '/'
  503. endif
  504. let l:title = empty(l:title) ? '[No Name]' : l:title
  505. let l:s .= l:i ==? l:current_tabnr ? '%#TabLineSel#' : '%#TabLine#'
  506. let l:s .= '%' . l:i . 'T[' . l:i . '] ' . l:title
  507. let l:s .= ' '
  508. endfor
  509. " show lingr unread count
  510. let l:lingr_unread = ''
  511. if exists('*lingr#unread_count')
  512. let l:lingr_unread_count = lingr#unread_count()
  513. if l:lingr_unread_count > 0
  514. let l:lingr_unread = '%#ErrorMsg#(' . l:lingr_unread_count . ')'
  515. elseif l:lingr_unread_count == 0
  516. let l:lingr_unread = '()'
  517. endif
  518. endif
  519. " build tabline
  520. let l:s .= '%#TabLineFill#%T%=%<[' . getcwd() . ']' . l:lingr_unread
  521. return l:s
  522. endfunction
  523. augroup vimrc-scratch-buffer
  524. autocmd!
  525. " Make a scratch buffer when unnamed buffer.
  526. autocmd BufEnter * call s:scratch_buffer()
  527. autocmd FileType qfreplace autocmd! vimrc-scratch * <buffer>
  528. function! s:scratch_buffer()
  529. if exists('b:scratch_buffer') || bufname('%') !=# '' || &l:buftype !=# ''
  530. return
  531. endif
  532. let b:scratch_buffer = 1
  533. setlocal buftype=nofile nobuflisted noswapfile bufhidden=hide
  534. augroup vimrc-scratch
  535. autocmd! * <buffer>
  536. autocmd BufWriteCmd <buffer> call s:scratch_on_BufWriteCmd()
  537. augroup END
  538. endfunction
  539. function! s:scratch_on_BufWriteCmd()
  540. silent! setl buftype< buflisted< swapfile< bufhidden< nomodified
  541. autocmd! vimrc-scratch * <buffer>
  542. if bufname('%') ==# '' && exists('b:scratch_buffer')
  543. execute 'saveas' . (v:cmdbang ? '!' : '') ' <afile>'
  544. filetype detect
  545. endif
  546. unlet! b:scratch_buffer
  547. endfunction
  548. augroup END
  549. command! -nargs=? ExtractMatches let s:pat = empty(<q-args>) ? @/ : <q-args> | let s:result = filter(getline(1, '$'), 'v:val =~# s:pat') | new | put =s:result
  550. let g:github_user = 'raa0121'
  551. let g:github#user = 'raa0121'