"dein Scripts----------------------------- if &compatible set nocompatible " Be iMproved endif " Required: set runtimepath+=$HOME/.cache/dein/repos/github.com/Shougo/dein.vim " Required: if dein#load_state(expand('~/.cache/dein')) call dein#begin(expand('~/.cache/dein')) " Let dein manage dein " Required: call dein#add(expand('~/.cache/dein/repos/github.com/Shougo/dein.vim')) " Add or remove your plugins here like this: "call dein#add('Shougo/neosnippet.vim') "call dein#add('Shougo/neosnippet-snippets') " Required: call dein#end() call dein#save_state() endif " Required: filetype plugin indent on syntax enable call dein#add('lervag/vimtex') call dein#add('junegunn/vim-easy-align') " If you want to install not installed plugins on startup. if dein#check_install() call dein#install() endif "End dein Scripts------------------------- set textwidth=0 set number set expandtab set shiftwidth=4 set tabstop=4 set softtabstop=4 "set cin set autoindent set hlsearch set scrolloff=3 set laststatus=2 set t_Co=256 syntax on "mac (and windows?) font, linux font "I think if the font is found, it will be used. "The font setting for linux below is NOT tested yet (20210218), so maybe doesnt work. set guifont=Menlo\ Regular:h13,Ubuntu\ Mono\ Regular\ 15 colorscheme molokai set ffs=unix,dos,mac set statusline=%t%m%r%h%w\ [%{&ff}]%<[%{&fenc}]%y%=\ %l,%L\ \ %P set fileencodings=utf-8,sjis,euc-jp set hidden hi Comment ctermfg=246 hi CursorLine ctermbg=238 hi Visual guibg=#707050 hi LineNr guifg=#bbbbbb guibg=#293739 hi Conditional guifg=#FF77AA gui=bold hi Identifier guifg=#EE9922 hi Keyword guifg=#FF77AA gui=bold hi MatchParen guifg=#000000 guibg=#EE9922 gui=bold hi Operator guifg=#FF77AA hi Repeat guifg=#FF77AA gui=bold hi SpecialChar guifg=#FF77AA gui=bold hi Statement guifg=#FF77AA gui=bold hi StorageClass guifg=#EE9922 gui=italic hi Tag guifg=#FF77AA gui=italic hi DiffChange ctermfg=181 ctermbg=237 hi DiffText ctermfg=282 ctermbg=253 cterm=bold filetype indent on set ruler set cursorline "set shortmess+=T "set shortmess=a "2-line command line below is related to opening zview files (*.z) without ungzipping by gzip.vim "If command line is one line, the line is filled with warning set cmdheight=2 "use gh, gj, gk, gl instead of hjkl----------------------------- nnoremap j gj nnoremap k gk vnoremap j gj vnoremap k gk "Don't add register using x----------------------------- nnoremap x "_x noremap s <Nop> "Spell checker----------------------------- "details: https://qiita.com/crispy/items/9a49d7dc792740f062ab set spelllang=en,cjk fun! s:SpellConf() redir! => syntax silent syntax redir END set spell if syntax =~? '/<comment\>' syntax spell default syntax match SpellMaybeCode /\<\h\l*[_A-Z]\h\{-}\>/ contains=@NoSpell transparent containedin=Comment contained else syntax spell toplevel syntax match SpellMaybeCode /\<\h\l*[_A-Z]\h\{-}\>/ contains=@NoSpell transparent endif syntax cluster Spell add=SpellNotAscii,SpellMaybeCode endfunc augroup spell_check autocmd! autocmd BufReadPost,BufNewFile,Syntax * call s:SpellConf() augroup END "End of spell checker----------------------------- "Commands defined by me----------------------------- command W retab|set fenc=utf-8|w|set ff=unix|w command Wq retab|set fenc=utf-8|w|set ff=unix|w|q "count words command Cw %s/\S\+//gn "count lines command Cl %s/^//gn "convert 4 Spaces to 1 Tab command St set noexpandtab | retab! 4 "convert 1 Tab to 4 Spaces command Ts set expandtab | retab 4 "open zview files (*.z) without ungzipping by gzip.vim----------------------------- let g:loaded_gzipPlugin=1 let g:loaded_gzip=1 "Modify vim status line augroup my_status_line autocmd! autocmd BufEnter,BufLeave,BufWritePost * if &ff=~'dos' | hi StatusLine ctermfg=124 ctermbg=253 guifg=#af0000 guibg=#dadada | else | hi StatusLine term=bold,reverse cterm=bold,reverse ctermfg=238 ctermbg=253 gui=bold,reverse guifg=#293739 guibg=#dadada | endif augroup END "when searching, always use regular expression----------------------------- nnoremap <expr> / _(":%s/<Cursor>/&/gn") "when searching, display hit number ----------------------------- function! s:move_cursor_pos_mapping(str, ...) let left = get(a:, 1, "<Left>") let lefts = join(map(split(matchstr(a:str, '.*<Cursor>\zs.*\ze'), '.\zs'), 'left'), "") return substitute(a:str, '<Cursor>', '', '') . lefts endfunction function! _(str) return s:move_cursor_pos_mapping(a:str, "\<Left>") endfunction " Vimtex settings----------------------------- let g:tex_flavor='latex' let g:vimtex_compiler_latexmk = { \ 'background': 1, \ 'build_dir': '', \ 'continuous': 1, \ 'options': ['' \], \} let g:vimtex_view_method = 'skim' let g:vimtex_quickfix_open_on_warning = 0 "0: Display only error messages without warning messages let g:vimtex_imaps_enabled = 0 "0: dont use shortcut to input latex commad "fun syntex() " syn match texComment "\(\\gsout\s\+.\|\\gsout\s*{.*}\)" " "syn match texRed /\(\\red\s\+.\|\\red\s*{.*}\)/ " "hi texRed guifg=#FF0000 "endfun "以下texRed関連の設定はあとで整理すること "hi texRed guifg=#FF0000 ctermfg=9 "highlight link texRed Error augroup my_tex autocmd! " autocmd Syntax tex call syntex() "Below command: make a part beginning from \gsout gray in tex with my stylefile autocmd Syntax tex syn region xBlock start="{" end="}" contained transparent autocmd Syntax tex syn region texComment matchgroup=texComment start="\\gsout{" end="}" contains=xBlock autocmd Syntax tex syn region texComment matchgroup=texComment start="\\comment{" end="}" contains=xBlock " autocmd Syntax tex syn match texComment /\(\\gsout\s\+.\|\\gsout\s*{[^{}]*}\)/ "以下の2行を有効化するほうが、highlightはうまくいく。だが、:Clearのmatchと形式が違うため、highlightされても消えない箇所が発生する。 """autocmd Syntax tex syn region texComment matchgroup=texComment start="\\gsout{" end="}" contains=xBlock """autocmd Syntax tex syn region xBlock start="{" end="}" contained transparent " autocmd Syntax tex syn match texComment /\(\\gsout\s\+.\|\\gsout\s*{.*}\)/ "make the text color red after \red (my original command) "autocmd Syntax tex syn match texStatement /\(\\red\s\+.\|\\red\s*{.*}\)/ "もともとは下記 """autocmd Syntax tex syn match texSection /\(\\green\s\+.\|\\green\s*{[^{}]*}\)/ "以下の2行(もとは2行あった。今は1行)を有効化するほうが、highlightはうまくいく。だが、:Clearのmatchと形式が違うため、highlightされても消えない箇所が発生する。pythonのプログラムを使うことにしたため、大丈夫。 autocmd Syntax tex syn region texSection matchgroup=texSection start="\\green{" end="}" contains=xBlock, texInput " autocmd Syntax tex syn match texTypeStyle /\(\\red\s\+.\|\\red\s*{.*}\)/ "make the text color red after \red (my original command) "autocmd Syntax tex syn match texStatement /\(\\red\s\+.\|\\red\s*{.*}\)/ "autocmd Syntax tex syn match texBoldStyle /\(\\red\s\+.\|\\red\s*{[^{}]*}\)/ "autocmd Syntax tex syn match texStatement /\(\\red\s\+.\|\\red\s*{[^{}]*}\)/ autocmd Syntax tex syn region texInput matchgroup=texInput start="\\memo{" end="}" contains=xBlock " autocmd Syntax tex syn match texInput /\(\\memo\s\+.\|\\memo\s*{[^{}]*}\)/ "autocmd Syntax tex syn match texInput /\(\\doit\s\+.\|\\doit\s*{[^{}]*}\)/ "autocmd Syntax tex syn match texTypeStyle /\(\\red\s\+.\|\\red\s*{.*}\)/ "highlight not solved comment (\cmt{...}) by teachers "regexでのmatchよりmatchgroup...start...end...のほうがvimの動作が高速。regexだと、scroll時にちょっと引っかかる。 autocmd Syntax tex syn region texInput matchgroup=texInput start=/\\begin{lstlisting}\[language=cmt\]/ end=/\\end{lstlisting}/ autocmd Syntax tex syn region texInput matchgroup=texInput start=/\\begin{cmt}/ end=/\\end{cmt}/ " autocmd Syntax tex syn match texInput /\\begin{lstlisting}\[language=cmt\]\_.\{-}\\end{lstlisting}/ " autocmd Syntax tex syn match texInput /\\begin{cmt}\_.\{-}\\end{cmt}/ "highlight solved comment (\cmt{...}) by teachers autocmd Syntax tex syn region texComment matchgroup=texComment start="\\begin{lstlisting}\[language=cmtg\]" end="\\end{lstlisting}" autocmd Syntax tex syn region texComment matchgroup=texComment start="\\begin{cmtg}" end="\\end{cmtg}" " autocmd Syntax tex syn match texComment /\\begin{lstlisting}\[language=cmtg\]\_.\{-}\\end{lstlisting}/ " autocmd Syntax tex syn match texComment /\\begin{cmtg}\_.\{-}\\end{cmtg}/ " autocmd Syntax tex syn match texStatement /\\cite/ "autocmd Syntax tex syn match texStatement /\(\\cite\s\+.\|\\cite\s*{[^{}]*}\)/ " For tex file, larger linespace (line height) and different font is set. autocmd Syntax tex set linespace=6 | set guifont=Ricty-Regular:h16 "SourceHanCodeJP-Regular:h13 " For quickfix message window height (default is 10) autocmd FileType qf 6wincmd_ augroup END "syntax match texStatement /\\red\s*{.*}/ "highlight link texRed Identifier "autocmd Syntax * syn match texRed /\(\\red\s\+.\|\\red\s*{.*}\)/ "hi Keyword guifg=#FF0000 "hi link texRed Keyword "syn match Keyword /\(\\red\s\+.\|\\red\s*{.*}\)/ "When converting tex into html by pandoc, remove \green{}, \begin{itemize}, \end{itemize} \item \gsout{} \dd{} "command Clear %s/\(\\item\|\\green\s*{[^{}]*}\|\\begin{itemize}\|\\end{itemize}\|\\gsout\s*{[^{}]*}\|\~\\\\\)//g | %s/\(\\begin{lstlisting}\[language=cmtg\]\_.\{-}\\end{lstlisting}\|\\begin{cmtg}\_.\{-}\\end{cmtg}\)//g | %g/\\dd/norm!knd% "command Clearx %s/\\gsout/&/gn | "Convert tex into html with pandoc "%:t:r means get only filename not fullpath. This is needed for browsersync --index option. let g:texfilename = expand("%:t:r") let g:current_dir = expand("%:h") "function! Rpl_lstlisting() " "pandoc ignore options for listing style, but set it as class in html. So " "style in html is set by other css defined by me " %s/\\begin{cmt}/\\begin{lstlisting}[language=cmt]/g " %s/\\end{cmt}/\\end{lstlisting}/g " %s/\\begin{cmtg}/\\begin{lstlisting}[language=cmtg]/g " %s/\\end{cmtg}/\\end{lstlisting}/g "endfunction "let pandoc_com = "pandoc '" . texfilename . ".tex' -s -o '" . texfilename . ".html' --pdf-engine lualatex --bibliography='" . texfilename . ".bib' -N -F pandoc-crossref --citeproc -M \"crossrefYaml=" . texfilename . ".yaml\" " ""--webtex --mathjax ""lualatex -V documentclass=bxjsarticle "let g:mod_eqref_html_com = "mod_eqref_html.py_relsym '" . texfilename . ".tex' '" . texfilename . ".html' " "let pandoc_com_docx = "pandoc '" . texfilename . ".tex' -s -o '" . texfilename . ".docx' --pdf-engine lualatex --bibliography='" . texfilename . ".bib' -N -F pandoc-crossref --citeproc -M \"crossrefYaml=" . texfilename . ".yaml\" " ""-M tableEqns=true "let g:mod_eqref_docx_com = "mod_eqref_docx.py_relsym '" . texfilename . ".tex' '" . texfilename . ".docx' " let prepost_proc = "conv_tex2.py_relsym " . texfilename . ".tex" "Remove \green{}, \begin{itemize}, \end{itemize} \item \gsout{} \dd{} and save "as an OTHER tex file (..._temp.tex) command Clear echo system(prepost_proc . " -c" ) command Clearv echo system(prepost_proc . " -c -v" ) "Latex converter, display help. command Pdh echo system(prepost_proc . " -h" ) "pdf output. You can also use \ll (vimtex command). command Pdl echo system(prepost_proc . " -l &" ) command Pdlv echo system(prepost_proc . " -l -v" ) command Pdlc echo system(prepost_proc . " -l -c &" ) command Pdlcv echo system(prepost_proc . " -l -c -v" ) "html output. Fast compiling tex is useful to check when writing. command Pd echo system(prepost_proc . " -p" ) command Pdv echo system(prepost_proc . " -p -v" ) command Pdc echo system(prepost_proc . " -p -c" ) command Pdcv echo system(prepost_proc . " -p -c -v" ) "command Pd call Rpl_lstlisting() | w | echo system(pandoc_com . " --csl 'mycsl.csl' --mathjax") | echo system(mod_eqref_html_com) "command Pdv call Rpl_lstlisting() | w | echo system(pandoc_com . " --csl 'mycsl.csl' --mathjax --verbose") | echo system(mod_eqref_html_com . " -v") "html output for dropbox paper. Some not-converted equations should be newly placed between $$ BY YOUR HAND. command Pdd echo system(prepost_proc . " -d" ) command Pddv echo system(prepost_proc . " -d -v" ) command Pddc echo system(prepost_proc . " -d -c" ) command Pddcv echo system(prepost_proc . " -d -c -v" ) "command Pdd call Rpl_lstlisting() | w | echo system(pandoc_com . " --csl 'mycsl-with-title.csl' ") | echo system(mod_eqref_html_com . " -d" ) "command Pddv call Rpl_lstlisting() | w | echo system(pandoc_com . " --csl 'mycsl-with-title.csl' --verbose") | echo system(mod_eqref_html_com . " -d -v" ) "For Test. Originally for --mimetex option, but it was removed from the new version pandoc in 2018. "command Pdt call Rpl_lstlisting() | w | echo system(pandoc_com . " --csl 'mycsl.csl' --webtex ") | echo system(mod_eqref_html_com) "http://localhost:8000/cgi-bin/mimetex.cgi? "word output for dropbox paper command Pdw echo system(prepost_proc . " -w" ) command Pdwv echo system(prepost_proc . " -w -v" ) command Pdwc echo system(prepost_proc . " -w -c" ) command Pdwcv echo system(prepost_proc . " -w -c -v" ) "command Pdw call Rpl_lstlisting() | w | echo system(pandoc_com_docx . " --csl 'mycsl.csl' --mathjax") | echo system(mod_eqref_docx_com) "command Pdwv call Rpl_lstlisting() | w | echo system(pandoc_com_docx . " --csl 'mycsl.csl' --mathjax --verbose") | echo system(mod_eqref_docx_com . " -v") "command Pandoc echo pandoc_com command Pdf echo system(prepost_proc . " -f" ) command Pdfv echo system(prepost_proc . " -f -v" ) " Command to launch browser-sync to auto reload html generated by pandoc e.g. let browser_sync_com = "browser-sync start --server --files '" . texfilename . ".html' --index \"" . texfilename . ".html\" --no-notify --browser='google chrome' --logLevel silent & " "--no-open "This option is to avoid opening browser automatically when starting browser-sync command Bs echo browser_sync_com | echo system(browser_sync_com) "command Bs echo browser_sync_com "Browser sysnc kill. Killing macOS open command to open the link in browser is also needed. So the second command is needed. let kill_browser_sync = "ps -ef | grep browser-sync | grep '" . texfilename . ".html' | awk '{print $2}' | xargs kill" let kill_browser_open = "ps -ef | grep open | grep 'http://localhost:30..' | awk '{print $2}' | xargs kill " command Bsk echo kill_browser_sync | echo system(kill_browser_sync) | echo kill_browser_open | echo system(kill_browser_open) "command Bsk echo kill_browser_sync " kill and start browser-sync ( Bsr = BrowserSyncRestart ) command Bsr echo system(kill_browser_sync) | echo system(kill_browser_open) | echo system(browser_sync_com) " Grep processes related to browsersync command Bsp echo system("ps -ef | grep browser-sync | grep -v grep") | echo system("ps -ef | grep open | grep 'http://localhost:30..' | grep -v grep") "kill all browser-sync processes let kill_all_browser_sync = "ps -ef | grep browser-sync | awk '{print $2}' | xargs kill" command Bska echo kill_all_browser_sync | echo system(kill_all_browser_sync) | echo kill_browser_open | echo system(kill_browser_open) " Vim-Easy-Align settings----------------------------- " Start interactive EasyAlign in visual mode (e.g. vipga) xmap ga <Plug>(EasyAlign) " Start interactive EasyAlign for a motion/text object (e.g. gaip) nmap ga <Plug>(EasyAlign) " Sandwich Something Selected in Visual Mode----------------------------- " % Note: You can NOT sandwich multiple lines----------------------------- " After visual selection, replace the selection with that one sandwiched by $ " <silent>: suppress error report, <SID>: use 's:' defined function xnoremap <silent> s$ :call <SID>add_brackets( '$' , '$' )<CR> " After visual selection, replace the selection with that one sandwiched by " xnoremap <silent> s" :call <SID>add_brackets( '"' , '"' )<CR> " After visual selection, replace the selection with that one sandwiched by ' xnoremap <silent> s' :call <SID>add_brackets( "'" , "'" )<CR> " After visual selection, replace the selection with that one sandwiched by () xnoremap <silent> s( :call <SID>add_brackets( '(' , ')' )<CR> xnoremap <silent> s) :call <SID>add_brackets( '(' , ')' )<CR> " After visual selection, replace the selection with that one sandwiched by {} xnoremap <silent> s{ :call <SID>add_brackets( '{' , '}' )<CR> xnoremap <silent> s} :call <SID>add_brackets( '{' , '}' )<CR> " After visual selection, replace the selection with that one sandwiched by [] xnoremap <silent> s[ :call <SID>add_brackets( '[' , ']' )<CR> xnoremap <silent> s] :call <SID>add_brackets( '[' , ']' )<CR> " After visual selection, replace the selection with that one sandwiched by <> xnoremap <silent> s< :call <SID>add_brackets( '<' , '>' )<CR> xnoremap <silent> s> :call <SID>add_brackets( '<' , '>' )<CR> " After visual selection, replace the selection with that one sandwiched by <!-- --> (html comment) xnoremap <silent> sh :call <SID>add_brackets( '<!-- ' , ' -->' )<CR> " After visual selection, replace the selection with that one sandwiched by /* */ (c comment) xnoremap <silent> sc :call <SID>add_brackets( '/* ' , ' */' )<CR> " After visual selection, replace the selection with that one sandwiched by $_{}$ xnoremap <silent> sb :call <SID>add_brackets( '\tb{' , '}' )<CR> " xnoremap <silent> sb :call <SID>add_brackets( '$_{' , '}$' )<CR> " After visual selection, replace the selection with that one sandwiched by $^{}$ xnoremap <silent> sp :call <SID>add_brackets( '\tp{' , '}' )<CR> " xnoremap <silent> sp :call <SID>add_brackets( '$^{' , '}$' )<CR> " After visual selection, replace the selection with that one sandwiched by \te{} xnoremap <silent> st :call <SID>add_brackets( '\te{' , '}' )<CR> " To make Italic, after visual selection, replace the selection with that one sandwiched by \emph{} xnoremap <silent> se :call <SID>add_brackets( '\emph{' , '}' )<CR> " To make the sentence gray and strike-outed, after visual selection, replace the selection with that one sandwiched by \gsout{} xnoremap <silent> so :call <SID>add_brackets( '\gsout{' , '}' )<CR> " To make the sentence highlighted, after visual selection, replace the selection with that one sandwiched by \hl{} xnoremap <silent> sh :call <SID>add_brackets( '\hl{' , '}' )<CR> " To avoid errors due to \hl and \cite or math expression, after visual selection, replace the selection with that one sandwiched by \mbox{} xnoremap <silent> sm :call <SID>add_brackets( '\mbox{' , '}' )<CR> " After visual selection, replace the selection with that one sandwiched by $^{}$ function! s:add_brackets(w_begin, w_end) " escape unnamed register let @y = @0 " gv: select something selected in visual mode again in normal mode " "zc: change something and add it to buffer z silent normal gv"zc " modify buffer z let @z = a:w_begin . @z . a:w_end " paste (modified) buffer z silent normal "zp " return original unnamed register to unnamed register let @" = @y endfunction