diff options
author | InigoGutierrez <inigogf.95@gmail.com> | 2019-11-19 21:32:29 +0100 |
---|---|---|
committer | InigoGutierrez <inigogf.95@gmail.com> | 2019-11-19 21:32:29 +0100 |
commit | f0b080e5feea1a0a85065b6e0d38dbcf925e07c1 (patch) | |
tree | 7e779dc7ec474672a0fa8b4c1ed51b6f7eb171ce | |
parent | 0f43850d545f0768ef37161faea0b5449aadb749 (diff) | |
download | configs-f0b080e5feea1a0a85065b6e0d38dbcf925e07c1.tar.gz configs-f0b080e5feea1a0a85065b6e0d38dbcf925e07c1.zip |
Created vim folder for .vimrc and plugins.
-rw-r--r-- | files/vim/.vimrc (renamed from files/rcs/.vimrc) | 95 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/css/css.vim | 11 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/css/css_mappings.vim | 15 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/html/html.vim | 8 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/html/html_mappings.vim | 63 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/java/java.vim | 13 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/javascript/javascript.vim | 12 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/javascript/javascript_mappings.vim | 22 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/python/python.vim | 17 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/sh/sh.vim | 5 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/tex/tex.vim | 33 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/text/text.vim | 12 | ||||
-rw-r--r-- | files/vim/ftplugin/ftplugin/vimwiki/vimwiki.vim | 18 | ||||
-rw-r--r-- | files/vim/plugin/plugin/SWTC.vim | 339 | ||||
-rw-r--r-- | files/vim/plugin/plugin/dragvisuals.vim | 345 | ||||
-rw-r--r-- | files/vim/plugin/plugin/rng.vim | 83 |
16 files changed, 1008 insertions, 83 deletions
diff --git a/files/rcs/.vimrc b/files/vim/.vimrc index bbedcf3..65b41fa 100644 --- a/files/rcs/.vimrc +++ b/files/vim/.vimrc @@ -65,7 +65,12 @@ vmap <expr> D DVB_Duplicate() " Show tabs "exec "set listchars=tab:\uBB\uBB,trail:\uB7,nbsp:~" exec "set listchars=tab:\uBB·,trail:\uB7,nbsp:~" -nnoremap <leader>t :set list!<CR> +nnoremap <leader>l :set list!<CR> + +" For YouCompleteMe +let g:ycm_auto_trigger = 0 +let g:ycm_autoclose_preview_window_after_insertion = 1 +let g:ycm_key_list_stop_completion = ['<C-y>', '<C-Space>'] " For syntastic set statusline+=%#warningmsg# @@ -147,6 +152,12 @@ map <C-l> <C-w>l "map <C-K> <C-w>K "map <C-L> <C-w>L +nnoremap <Tab> gt +nnoremap <S-Tab> gT + +nnoremap <leader>S :!tmux split-window -p 40<CR><CR> + +nnoremap <leader>/ /grtfjx<CR> " Color syntax enable syntax on @@ -196,85 +207,3 @@ nnoremap <leader>cs <Esc>:r ~/.config/custom/vim/c/switch.txt<CR>/<+++><CR>cf> nnoremap <leader>cw <Esc>:r ~/.config/custom/vim/c/while.txt<CR>/<+++><CR>cf> nnoremap <leader>cd <Esc>:r ~/.config/custom/vim/c/do.txt<CR>/<+++><CR>cf> -nnoremap <leader>fixit :YcmCompleter FixIt<CR> - -"" html - -" Layout elements -inoremap <leader>hheader <header><Enter><Enter></header><Enter><++><Esc>kki -inoremap <leader>hnav <nav><Enter><Enter></nav><Enter><++><Esc>kki -inoremap <leader>hsection <section><Enter><Enter></section><Enter><++><Esc>kki -inoremap <leader>harticle <article><Enter><Enter></article><Enter><++><Esc>kki -inoremap <leader>hfooter <footer><Enter><Enter></footer><Enter><++><Esc>kki -inoremap <leader>haside <aside><Enter><Enter></aside><Enter><++><Esc>kki -inoremap <leader>hdiv <div class=""><Enter><++><Enter></div><Enter><++><Esc>?""<Enter>a - -" Headers and paragraphs -inoremap <leader>hh1 <h1></h1><Enter><++><Esc>?</h1><Enter>i -inoremap <leader>hh2 <h2></h2><Enter><++><Esc>?</h2><Enter>i -inoremap <leader>hh3 <h3></h3><Enter><++><Esc>?</h3><Enter>i -inoremap <leader>hh4 <h4></h4><Enter><++><Esc>?</h4><Enter>i -inoremap <leader>hh5 <h5></h5><Enter><++><Esc>?</h5><Enter>i -inoremap <leader>hh6 <h6></h6><Enter><++><Esc>?</h6><Enter>i -inoremap <leader>hp <p></p><Enter><++><Esc>?</p><Enter>i - -" Text formatting -inoremap <leader>hb <b></b><++><Esc>?</b><Enter>i -inoremap <leader>hi <i></i><++><Esc>?</i><Enter>i -inoremap <leader>hem <em></em><++><Esc>?</em><Enter>i -inoremap <leader>hcode <code></code><++><Esc>?</code><Enter>i -inoremap <leader>hsub <sub></sub><++><Esc>?</sub><Enter>i -inoremap <leader>hsup <sup></sup><++><Esc>?</sup><Enter>i -inoremap <leader>hcite <cite></cite><++><Esc>?</cite><Enter>i - -" Tables -inoremap <leader>htable <table border=""><Enter><caption><++></caption><Enter><thead><Enter><tr><Enter><++><Enter></tr><Enter></thead><Enter><tbody><Enter><++><Enter></tbody><Enter></table><Enter><++><Esc>?""<Enter>a -inoremap <leader>htr <tr><Enter><Enter></tr><Enter><++><Esc>kki -inoremap <leader>hth <th></th><Enter><++><Esc>?</<Enter>i -inoremap <leader>htd <td></td><Enter><++><Esc>?</<Enter>i - -" Lists -inoremap <leader>hul <ul><Enter><li></li><Enter><++><Enter></ul><Enter><++><Esc>?</l<Enter>i -inoremap <leader>hol <ol><Enter><li></li><Enter><++><Enter></ol><Enter><++><Esc>?</l<Enter>i -inoremap <leader>hli <li></li><Enter><++><Esc>?</<Enter>i - -" Forms -inoremap <leader>hform <form><Enter><fieldset><Enter><Enter></fieldset><Enter></form><Enter><++><Esc>3ki -inoremap <leader>hfs <fieldset><Enter><Enter></fieldset><Enter><++><Esc>kki -inoremap <leader>hlegend <legend></legend><Enter><++><Esc>?</<Enter>i -inoremap <leader>hlabel <label><input type="<++>"></label><Enter><++><Esc>?<i<Enter>i - -" Media -inoremap <leader>ha <a href=""><++></a><Enter><++><Esc>?""<Enter>a -inoremap <leader>himg <img src="" alt="<++>"><Enter><++><Esc>?""<Enter>a - -" Misc -" Comment a line -nnoremap <leader>hc I<!-- <Esc>A --><Esc>0 -" Uncomment a line -nnoremap <leader>hC 05x/--><Enter>3x0 - -"" LaTeX - -nnoremap <leader>lc :w<Enter>:! pdflatex --shell-escape %<Enter> -inoremap <leader>ldocclass \documentclass{}<Esc>o<++><Esc>k$i -inoremap <leader>lpckg \usepackage{}<Esc>o<++><Esc>k$i -inoremap <leader>lbdoc \begin{document}<Esc>o<Enter><Enter><Enter>\end{document}<Esc>kkI -inoremap <leader>lauthor \author{}<Esc>o<++><Esc>k$i -inoremap <leader>ltitle \title{}<Esc>o<++><Esc>k$i -inoremap <leader>lsection \section{}<Esc>o<++><Esc>k$i -inoremap <leader>lssection \subsection{}<Esc>o<++><Esc>k$i -inoremap <leader>lsssection \subsubsection{}<Esc>o<++><Esc>k$i -inoremap <leader>lssssection \paragraph{}<Esc>o<++><Esc>k$i -inoremap <leader>lsssssection \subparagraph{}<Esc>o<++><Esc>k$i -inoremap <leader>lb \textbf{}<++><Esc>F}i -inoremap <leader>li \textit{}<++><Esc>F}i -inoremap <leader>lemph \emph{}<++><Esc>F}i -inoremap <leader>llabel \label{}<++><Esc>F}i -inoremap <leader>lref ~\ref{}<++><Esc>F}i -inoremap <leader>lenumerate \begin{enumerate}<Esc>o<Enter><Enter><Enter>\end{enumerate}<Esc>kkI\item<Enter><Esc>I<Tab><++><Esc>k<<i<Tab><Esc>$a<Space> -inoremap <leader>litemize \begin{itemize}<Esc>o<Enter><Enter><Enter>\end{itemize}<Esc>kkI\item<Enter><Esc>I<Tab><++><Esc>k<<i<Tab><Esc>$a<Space> -inoremap <leader>litem \item<Enter><++><Esc>k$a<Space> -inoremap <leader>limage \begin{figure}[H]<Enter>\begin{center}<Enter>\includegraphics[width=\textwidth]{}<Enter>\caption{<++>}<Enter>\end{center}<Enter>\end{figure}<Enter><++><Esc>4k$i -inoremap <leader>ltable \begin{table}[H]<Enter>\makebox[\linewidth]{\centering<Enter>\centering<Enter>\begin{tabular}{c<Space>cxxx}<Enter>\toprule<Enter><++><Space>&<Space><++><Space>\\<Enter>\midrule<Enter><++><Space>&<Space><++><Space>\\<Enter>\bottomrule<Enter>\end{tabular}<Enter>}<Enter>\end{table}<Enter><++><Esc>?xxx<Enter>cw - diff --git a/files/vim/ftplugin/ftplugin/css/css.vim b/files/vim/ftplugin/ftplugin/css/css.vim new file mode 100644 index 0000000..0064fda --- /dev/null +++ b/files/vim/ftplugin/ftplugin/css/css.vim @@ -0,0 +1,11 @@ +" ~/.vim/ftplugin/css/css.vim +" CSS-specific vim configuration +" +" Syntastic linters: csslint, prettycss, sstylelint + + +call matchadd('ColorColumn', '\%81v', 100) + +let g:syntastic_css_csslint_args = "--ignore=order-alphabetical,ids" + +autocmd BufEnter *.css source ~/.vim/ftplugin/css/css_mappings.vim diff --git a/files/vim/ftplugin/ftplugin/css/css_mappings.vim b/files/vim/ftplugin/ftplugin/css/css_mappings.vim new file mode 100644 index 0000000..161f850 --- /dev/null +++ b/files/vim/ftplugin/ftplugin/css/css_mappings.vim @@ -0,0 +1,15 @@ +" ~/.vim/ftplugin/css/css_mappings.vim +" CSS-specific vim configuration (reloaded when entering buffer) + +" Tabs are expanded to 4 spaces +set tabstop=4 shiftwidth=4 noexpandtab +" Don't show existing tabs +set nolist + +set textwidth=80 + +" Mappings +nnoremap <leader>cc :sp ~/.vim/ftplugin/css/css.vim<CR> +nnoremap <leader>cm :sp ~/.vim/ftplugin/css/css_mappings.vim<CR> +nnoremap <leader>e :Errors<CR> +nnoremap <leader>s vi{!sort<CR> diff --git a/files/vim/ftplugin/ftplugin/html/html.vim b/files/vim/ftplugin/ftplugin/html/html.vim new file mode 100644 index 0000000..e4e0ab5 --- /dev/null +++ b/files/vim/ftplugin/ftplugin/html/html.vim @@ -0,0 +1,8 @@ +" ~/.vim/ftplugin/html/html.vim +" HTML-specific vim configuration +" +" Syntastic linter: tidy + +call matchadd('ColorColumn', '\%101v', 100) + +autocmd BufEnter *.html source ~/.vim/ftplugin/html_mappings.vim diff --git a/files/vim/ftplugin/ftplugin/html/html_mappings.vim b/files/vim/ftplugin/ftplugin/html/html_mappings.vim new file mode 100644 index 0000000..b798408 --- /dev/null +++ b/files/vim/ftplugin/ftplugin/html/html_mappings.vim @@ -0,0 +1,63 @@ +" ~/.vim/ftplugin/html/html_mappings.vim +" HTML-specific vim mappings + +nnoremap <leader>o :!$BROWSER % &<CR><CR> +nnoremap <leader>f :!firefox --new-window % &<CR><CR> +nnoremap <leader>cc :sp ~/.vim/ftplugin/html.vim<CR> +nnoremap <leader>cm :sp ~/.vim/ftplugin/html_mappings.vim<CR> +nnoremap <leader>e :Errors<CR> + +" Layout elements +inoremap <leader>hheader <header><Enter><Enter></header><Enter><++><Esc>kki +inoremap <leader>hnav <nav><Enter><Enter></nav><Enter><++><Esc>kki +inoremap <leader>hsection <section><Enter><Enter></section><Enter><++><Esc>kki +inoremap <leader>harticle <article><Enter><Enter></article><Enter><++><Esc>kki +inoremap <leader>hfooter <footer><Enter><Enter></footer><Enter><++><Esc>kki +inoremap <leader>haside <aside><Enter><Enter></aside><Enter><++><Esc>kki +inoremap <leader>hdiv <div class=""><Enter><++><Enter></div><Enter><++><Esc>?""<Enter>a + +" Headers and paragraphs +inoremap <leader>hh1 <h1></h1><Enter><++><Esc>?</h1><Enter>i +inoremap <leader>hh2 <h2></h2><Enter><++><Esc>?</h2><Enter>i +inoremap <leader>hh3 <h3></h3><Enter><++><Esc>?</h3><Enter>i +inoremap <leader>hh4 <h4></h4><Enter><++><Esc>?</h4><Enter>i +inoremap <leader>hh5 <h5></h5><Enter><++><Esc>?</h5><Enter>i +inoremap <leader>hh6 <h6></h6><Enter><++><Esc>?</h6><Enter>i +inoremap <leader>hp <p></p><Enter><++><Esc>?</p><Enter>i + +" Text formatting +inoremap <leader>hb <b></b><++><Esc>?</b><Enter>i +inoremap <leader>hi <i></i><++><Esc>?</i><Enter>i +inoremap <leader>hem <em></em><++><Esc>?</em><Enter>i +inoremap <leader>hcode <code></code><++><Esc>?</code><Enter>i +inoremap <leader>hsub <sub></sub><++><Esc>?</sub><Enter>i +inoremap <leader>hsup <sup></sup><++><Esc>?</sup><Enter>i +inoremap <leader>hcite <cite></cite><++><Esc>?</cite><Enter>i + +" Tables +inoremap <leader>htable <table border=""><Enter><caption><++></caption><Enter><thead><Enter><tr><Enter><++><Enter></tr><Enter></thead><Enter><tbody><Enter><++><Enter></tbody><Enter></table><Enter><++><Esc>?""<Enter>a +inoremap <leader>htr <tr><Enter><Enter></tr><Enter><++><Esc>kki +inoremap <leader>hth <th></th><Enter><++><Esc>?</<Enter>i +inoremap <leader>htd <td></td><Enter><++><Esc>?</<Enter>i + +" Lists +inoremap <leader>hul <ul><Enter><li></li><Enter><++><Enter></ul><Enter><++><Esc>?</l<Enter>i +inoremap <leader>hol <ol><Enter><li></li><Enter><++><Enter></ol><Enter><++><Esc>?</l<Enter>i +inoremap <leader>hli <li></li><Enter><++><Esc>?</<Enter>i + +" Forms +inoremap <leader>hform <form><Enter><fieldset><Enter><Enter></fieldset><Enter></form><Enter><++><Esc>3ki +inoremap <leader>hfs <fieldset><Enter><Enter></fieldset><Enter><++><Esc>kki +inoremap <leader>hlegend <legend></legend><Enter><++><Esc>?</<Enter>i +inoremap <leader>hlabel <label><input type="<++>"></label><Enter><++><Esc>?<i<Enter>i + +" Media +inoremap <leader>ha <a href=""><++></a><Enter><++><Esc>?""<Enter>a +inoremap <leader>himg <img src="" alt="<++>"><Enter><++><Esc>?""<Enter>a + +" Misc +" Comment a line +nnoremap <leader>hc I<!-- <Esc>A --><Esc>0 +" Uncomment a line +nnoremap <leader>hC 05x/--><Enter>3x0 + diff --git a/files/vim/ftplugin/ftplugin/java/java.vim b/files/vim/ftplugin/ftplugin/java/java.vim new file mode 100644 index 0000000..0c9fe43 --- /dev/null +++ b/files/vim/ftplugin/ftplugin/java/java.vim @@ -0,0 +1,13 @@ +" ~/.vim/ftplugin/java.vim +" Java-specific vim configuration + +nnoremap <leader>gt :YcmCompleter GoTo<CR> +nnoremap <leader>gr :YcmCompleter GoToReferences<CR> +nnoremap <leader>fi :YcmCompleter FixIt<CR> +nnoremap <leader>rr :YcmCompleter RefactorRename<Space> +nnoremap <leader>e :YcmDiags<CR> +nnoremap <leader>R :!./run.sh<CR> + +call matchadd('ColorColumn', '\%131v', 100) + +let g:syntastic_java_checkers = [] diff --git a/files/vim/ftplugin/ftplugin/javascript/javascript.vim b/files/vim/ftplugin/ftplugin/javascript/javascript.vim new file mode 100644 index 0000000..470287d --- /dev/null +++ b/files/vim/ftplugin/ftplugin/javascript/javascript.vim @@ -0,0 +1,12 @@ +" ~/.vim/ftplugin/javascript/javascript.vim +" JavaScript-specific vim configuration +" +" Syntastic linters: jslint + +" Column marker: 80 characters +call matchadd('ColorColumn', '\%81v', 100) + +" JSLint arguments +let g:syntastic_javascript_jslint_args = "--browser --indent" + +autocmd BufEnter *.js source ~/.vim/ftplugin/javasctipt/javascript_BufEnter.vim diff --git a/files/vim/ftplugin/ftplugin/javascript/javascript_mappings.vim b/files/vim/ftplugin/ftplugin/javascript/javascript_mappings.vim new file mode 100644 index 0000000..f7214e2 --- /dev/null +++ b/files/vim/ftplugin/ftplugin/javascript/javascript_mappings.vim @@ -0,0 +1,22 @@ +" ~/.vim/ftplugin/javascript/javascript_BufEnter.vim +" JavaScript-specific vim configuration (reloaded when entering buffer) + +" Tabs are expanded to 4 spaces +set tabstop=4 shiftwidth=4 expandtab +" Show existing tabs (they can be deleted with :retab) +set list + +set textwidth=80 + +" Mappings +nnoremap <leader>cc :sp ~/.vim/ftplugin/javascript/javascript.vim<CR> +nnoremap <leader>cm :sp ~/.vim/ftplugin/javascript/javascript_BufEnter.vim<CR> +nnoremap <leader>E :Errors<CR> +inoremap <leader>if if (<+++>) {<CR><++><CR>} <++><Esc>?<+++><CR>cf> +inoremap <leader>else else {<CR><+++><CR>}<CR><++><Esc>?<+++><CR>cf> + +nnoremap <leader>gt :YcmCompleter GoTo<CR> +nnoremap <leader>gr :YcmCompleter GoToReferences<CR> +nnoremap <leader>fi :YcmCompleter FixIt<CR> +nnoremap <leader>r :YcmCompleter RefactorRename<Space> +nnoremap <leader>e :YcmDiags<CR> diff --git a/files/vim/ftplugin/ftplugin/python/python.vim b/files/vim/ftplugin/ftplugin/python/python.vim new file mode 100644 index 0000000..74c7e2c --- /dev/null +++ b/files/vim/ftplugin/ftplugin/python/python.vim @@ -0,0 +1,17 @@ +" ~/.vim/ftplugin/python/python.vim +" Python-specific vim configuration + +" Column marker: 80 characters +call matchadd('ColorColumn', '\%81v', 100) +let b:syntastic_mode="passive" + +nnoremap <leader>c :sp ~/.vim/ftplugin/python/python.vim<CR> +nnoremap <leader>E :Errors<CR> + +nnoremap <leader>gt :YcmCompleter GoTo<CR> +nnoremap <leader>gr :YcmCompleter GoToReferences<CR> +nnoremap <leader>gd :YcmCompleter GetDoc<CR> +nnoremap <leader>gT :YcmCompleter GetType<CR> +nnoremap <leader>fi :YcmCompleter FixIt<CR> +nnoremap <leader>r :YcmCompleter RefactorRename<Space> +nnoremap <leader>e :YcmDiags<CR> diff --git a/files/vim/ftplugin/ftplugin/sh/sh.vim b/files/vim/ftplugin/ftplugin/sh/sh.vim new file mode 100644 index 0000000..bebdcba --- /dev/null +++ b/files/vim/ftplugin/ftplugin/sh/sh.vim @@ -0,0 +1,5 @@ +" ~/.vim/ftplugin/sh.vim +" Bourne shell scripts specific vim configuration + +nnoremap <leader>e :Errors<CR> +call matchadd('ColorColumn', '\%101v', 100) diff --git a/files/vim/ftplugin/ftplugin/tex/tex.vim b/files/vim/ftplugin/ftplugin/tex/tex.vim new file mode 100644 index 0000000..43492e5 --- /dev/null +++ b/files/vim/ftplugin/ftplugin/tex/tex.vim @@ -0,0 +1,33 @@ +" ~/.vim/ftplugin/tex.vim +" LaTeX-specific vim configuration + +" Syntastic linters: chktex, lacheck, proselint + +call matchadd('ColorColumn', '\%91v', 100) + +nnoremap <leader>c :sp ~/.vim/ftplugin/tex.vim<CR> +nnoremap <leader>e :Errors<CR> +" proselint not enabled by default (and better not be) +nnoremap <leader>sp :SyntasticCheck proselint<CR> + +nnoremap <leader>lc :w<Enter>:! pdflatex --shell-escape %<Enter> +inoremap <leader>ldocclass \documentclass{}<Esc>o<++><Esc>k$i +inoremap <leader>lpckg \usepackage{}<Esc>o<++><Esc>k$i +inoremap <leader>lbdoc \begin{document}<Esc>o<Enter><Enter><Enter>\end{document}<Esc>kkI +inoremap <leader>lauthor \author{}<Esc>o<++><Esc>k$i +inoremap <leader>ltitle \title{}<Esc>o<++><Esc>k$i +inoremap <leader>lsection \section{}<Esc>o<++><Esc>k$i +inoremap <leader>lssection \subsection{}<Esc>o<++><Esc>k$i +inoremap <leader>lsssection \subsubsection{}<Esc>o<++><Esc>k$i +inoremap <leader>lssssection \paragraph{}<Esc>o<++><Esc>k$i +inoremap <leader>lsssssection \subparagraph{}<Esc>o<++><Esc>k$i +inoremap <leader>lb \textbf{}<++><Esc>F}i +inoremap <leader>li \textit{}<++><Esc>F}i +inoremap <leader>lemph \emph{}<++><Esc>F}i +inoremap <leader>llabel \label{}<++><Esc>F}i +inoremap <leader>lref ~\ref{}<++><Esc>F}i +inoremap <leader>lenumerate \begin{enumerate}<Esc>o<Enter><Enter><Enter>\end{enumerate}<Esc>kkI\item<Enter><Esc>I<Tab><++><Esc>k<<i<Tab><Esc>$a<Space> +inoremap <leader>litemize \begin{itemize}<Esc>o<Enter><Enter><Enter>\end{itemize}<Esc>kkI\item<Enter><Esc>I<Tab><++><Esc>k<<i<Tab><Esc>$a<Space> +inoremap <leader>litem \item<Enter><++><Esc>k$a<Space> +inoremap <leader>limage \begin{figure}[H]<Enter>\begin{center}<Enter>\includegraphics[width=\textwidth]{}<Enter>\caption{<++>}<Enter>\end{center}<Enter>\end{figure}<Enter><++><Esc>4k$i +inoremap <leader>ltable \begin{table}[H]<Enter>\makebox[\linewidth]{\centering<Enter>\centering<Enter>\begin{tabular}{c<Space>cxxx}<Enter>\toprule<Enter><++><Space>&<Space><++><Space>\\<Enter>\midrule<Enter><++><Space>&<Space><++><Space>\\<Enter>\bottomrule<Enter>\end{tabular}<Enter>}<Enter>\end{table}<Enter><++><Esc>?xxx<Enter>cw diff --git a/files/vim/ftplugin/ftplugin/text/text.vim b/files/vim/ftplugin/ftplugin/text/text.vim new file mode 100644 index 0000000..3252e54 --- /dev/null +++ b/files/vim/ftplugin/ftplugin/text/text.vim @@ -0,0 +1,12 @@ +" ~/.vim/ftplugin/text.vim +" Plain text files vim configuration +" +" Syntastic linter: proselint + +nnoremap <leader>c :sp ~/.vim/ftplugin/text.vim<CR> +nnoremap <leader>e :Errors<CR> + +call matchadd('ColorColumn', '\%101v', 100) + +" Proselint is slow to act +" let g:syntastic_text_checkers = ['proselint'] diff --git a/files/vim/ftplugin/ftplugin/vimwiki/vimwiki.vim b/files/vim/ftplugin/ftplugin/vimwiki/vimwiki.vim new file mode 100644 index 0000000..92eea91 --- /dev/null +++ b/files/vim/ftplugin/ftplugin/vimwiki/vimwiki.vim @@ -0,0 +1,18 @@ +" ~/.vim/ftplugin/vimwiki.vim +" vimwiki-specific vim configuration +" +" Syntastic linter: mdl, proselint, textlint + +" Tabs hate: tabs are expanded to 2 spaces +set tabstop=2 shiftwidth=2 expandtab +" Show existing tabs (they can be deleted with :retab) +set list + +" Column marker: 80 characters +call matchadd('ColorColumn', '\%81v', 100) +set textwidth=80 + +let g:syntastic_vimwiki_checkers = ['markdown/mdl'] + +nnoremap <leader>c :sp ~/.vim/ftplugin/vimwiki.vim<CR> +nnoremap <leader>e :Errors<CR> diff --git a/files/vim/plugin/plugin/SWTC.vim b/files/vim/plugin/plugin/SWTC.vim new file mode 100644 index 0000000..9459e92 --- /dev/null +++ b/files/vim/plugin/plugin/SWTC.vim @@ -0,0 +1,339 @@ +" Vim global plugin for Star Wars crawls +" Maintainer: Damian Conway +" License: This file is placed in the public domain. + +"###################################################################### +"## ## +"## To use: ## +"## ## +"## :SWTC <filename> ## +"## ## +"## See file 'intro.swtc' for the crawl-specification syntax ## +"## ## +"###################################################################### + + +" If already loaded, we're done... +if exists("loaded_SWcrawl") + finish +endif +let loaded_SWcrawl = 1 + +" Preserve external compatibility options, then enable full vim compatibility... +let s:save_cpo = &cpo +set cpo&vim + +" Set up the actual colon command... +command! -nargs=1 -complete=file SWTC call SWcrawl(<f-args>) + + +" Implementation.... + +let s:CRAWL_SPEED = 1 "(lines per second) +let s:STAR_DENSITY = 50 "(pixels per star, i.e. 1 star per STAR_DENSITY pixels) +let s:STARFIELD_HEIGHT = 2 "(screens deep) + +let s:LOGO_LINE1 = '^\s*\[\zs.*\ze\]\s*$' +let s:LOGO_LINE2 = '^\s*\[\[\zs.*\ze\]\]\s*$' +let s:LOGO_LINE3 = '^\s*\[\[\[\zs.*\ze\]\]\]\s*$' +let s:LOGO_LINE4 = '^\s*\[\[\[\[\zs.*\ze\]\]\]\]\s*$' +let s:CENTRED_CRAWL_LINE = '^\s*[>]\s*\zs.\{-}\ze\s*[<]\s*$' +let s:CRAWL_LINE = '^\s*[|]\s*\zs.\{-}\ze\s*[|]\s*$' +let s:PREFACE_LINE = '^\s*\zs.\{-}\ze\s*$' + +highlight SWC_PREFACE ctermfg=cyan +highlight SWC_FADE_LIGHT ctermfg=cyan +highlight SWC_FADE_DARK ctermfg=blue +highlight SWC_LOGO ctermfg=yellow cterm=bold +highlight SWC_CRAWL ctermfg=yellow +highlight SWC_STAR ctermfg=white +highlight SWC_BLACK ctermfg=black ctermbg=black + +let s:PREFACE_POS = { 'x': 10, 'y': 5 } + +function! SWcrawl (textsource) + " Load preface, logo, and text to be crawled... + let preface = [] + let logo1 = [] + let logo2 = [] + let logo3 = [] + let logo4 = [] + let crawl = [] + let centred = [] + let max_crawl_width = 0 + for nextline in readfile(a:textsource) + " Ignore blank lines... + if nextline =~ '^\s*$' + continue + + " Lines in [...] are logo components... + elseif nextline =~ s:LOGO_LINE4 + let logo4 += [ matchstr(nextline, s:LOGO_LINE4) ] + elseif nextline =~ s:LOGO_LINE3 + let logo3 += [ matchstr(nextline, s:LOGO_LINE3) ] + elseif nextline =~ s:LOGO_LINE2 + let logo2 += [ matchstr(nextline, s:LOGO_LINE2) ] + elseif nextline =~ s:LOGO_LINE1 + let logo1 += [ matchstr(nextline, s:LOGO_LINE1) ] + + " Lines in |...| are crawl components... + elseif nextline =~ s:CRAWL_LINE + let next_crawl = matchstr(nextline, s:CRAWL_LINE) + if strlen(next_crawl) > max_crawl_width + let max_crawl_width = strlen(substitute(next_crawl,'\s\+',' ','g')) + endif + let crawl += [ next_crawl ] + let centred += [ 0 ] + + " Lines in >...< are centred crawl components... + elseif nextline =~ s:CENTRED_CRAWL_LINE + let next_crawl = matchstr(nextline, s:CENTRED_CRAWL_LINE) + if strlen(next_crawl) > max_crawl_width + let max_crawl_width = strlen(substitute(next_crawl,'\s\+',' ','g')) + endif + let crawl += [ next_crawl ] + let centred += [ 1 ] + + " Anything else is preface... + else + let preface += [ substitute(matchstr(nextline, s:PREFACE_LINE), "^\s*", repeat(" ",s:PREFACE_POS.x), '') ] + + endif + endfor + + " Ensure all logos available... + let logo1 = len(logo1) ? logo1 : ["YOUR", "LOGO", "HERE"] + let logo2 = len(logo2) ? logo2 : copy(logo1) + let logo3 = len(logo3) ? logo3 : copy(logo2) + let logo4 = len(logo4) ? logo4 : copy(logo3) + + " Save current buffer for final transition effect... + let original_buffer = getline(1,'$') + + " Switch to a new buffer... + let prev_matches = getmatches() + enew! + let b:WIN = { 'x' : winwidth(0), 'y' : winheight(0) } + call setline(1, repeat([""], b:WIN.y + 1)) + + " And hide annoyances... + set lcs= + let old_rulerformat = &rulerformat + let &rulerformat="%#SWC_BLACK#%l" + echo "" + + " Generate starfield... + let stars = SWC_gen_stars() + + " Clear screen... + call setline(1, repeat([""], s:STARFIELD_HEIGHT * b:WIN.y) + original_buffer) + redraw + sleep 2 + + " Start with preface... + call matchadd('SWC_PREFACE', '.', 100) + call setline(s:PREFACE_POS.y, preface) + echo "" + redraw + sleep 5 + + " Clean up... + call clearmatches() + call setline(s:PREFACE_POS.y, repeat([""], len(preface))) + echo "" + redraw + sleep 1 + + " Then show logo receding at centre of screen... + call clearmatches() + call matchadd('SWC_BLACK', '*', 102) + call matchadd('SWC_STAR', '\s\zs[.]\ze\s', 101) + call matchadd('SWC_LOGO', '.', 100) + call SWC_draw_logo(logo1) + call SWC_paint_stars(stars) + echo "" + redraw + sleep 3 + + " Push it away... + call setline(1, repeat([""], b:WIN.y)) + call SWC_draw_logo(logo2) + call SWC_paint_stars(stars) + echo "" + redraw + sleep 500m + + call setline(1, repeat([""], b:WIN.y)) + call SWC_draw_logo(logo3) + call SWC_paint_stars(stars) + echo "" + redraw + sleep 500m + + call setline(1, repeat([""], b:WIN.y)) + call SWC_draw_logo(logo4) + call SWC_paint_stars(stars) + echo "" + redraw + sleep 500m + + + " Clean up... + call clearmatches() + call matchadd('SWC_STAR', '\s\zs[.]\ze\s', 101) + call setline(1, repeat([""], b:WIN.y)) + call SWC_paint_stars(stars) + echo "" + redraw + sleep 2 + + " Run crawl... + call clearmatches() + call matchadd('SWC_CRAWL', '.', 100) + call matchadd('SWC_STAR', '\s\zs[.]\ze\s', 101) + for offset_from_bottom in range(1, len(crawl) + b:WIN.y) + let crawl_line = offset_from_bottom < b:WIN.y ? 0 : offset_from_bottom - b:WIN.y + 1 + for screen_line in range(1, b:WIN.y) + if screen_line >= b:WIN.y - offset_from_bottom && crawl_line < len(crawl) + let padded_line = SWC_pad(crawl[crawl_line], screen_line, centred[crawl_line], max_crawl_width) + call setline(screen_line, padded_line) + let crawl_line += 1 + else + call setline(screen_line, "") + endif + endfor + call SWC_paint_stars(stars) + echo "" + redraw + exec 'sleep ' . s:trunc(1000/s:CRAWL_SPEED) . 'm' + if getchar(0) || offset_from_bottom > len(crawl) && padded_line !~ '\S' + break + endif + endfor + + " Pan starfield down... + call matchadd('SWC_FADE_DARK', '[^.]', 200) + sleep 200m + for offset_from_top in range(1, s:STARFIELD_HEIGHT * b:WIN.y) + 1delete + redraw + exec 'sleep ' . (200 - 2 * offset_from_top) . 'm' + endfor + sleep 200m + + + " Switch back to previous buffer and restore normal highlighting... + edit! # + call setmatches(prev_matches) + let &rulerformat = old_rulerformat + redraw + +endfunction + +function s:trunc (n) + return str2nr(string( a:n )) +endfunction + +function! SWC_draw_logo (logo) + let logo = copy(a:logo) + + " Find centre for logo... + let logo_width = 0 + for line in logo + if strlen(line) > logo_width + let logo_width = strlen(line) + endif + endfor + let logo_pos_x = (b:WIN.x - logo_width) / 2 + let logo_pos_y = (b:WIN.y - len(logo)) / 2 + + " Move logo to centre... + call map(logo, "repeat(' ', logo_pos_x) . v:val") + + " Draw logo + call setline(logo_pos_y, logo) + +endfunction + +function! SWC_pad (text, y_pos, centred, max_text_width) + + " Does this need padding??? + let words = split(a:text, '\s\+') + if len(words) < 1 + return a:text + endif + + " How many unpadded characters are there??? + let unpadded_width = 0 + for word in words + let unpadded_width += strlen(word) + endfor + + " How much padding is needed??? + let rel_y = (2.0 * a:y_pos / b:WIN.y) - 1.0 + let stretched_width = s:trunc( a:max_text_width + rel_y * (b:WIN.x - a:max_text_width) ) + let required_padding = max([ 0, stretched_width - unpadded_width ]) + let indent = (b:WIN.x - stretched_width) / 2 + let gap_count = len(words) - 1 + + " Is this a last line??? + let tight = a:centred || strlen(a:text) < 0.9 * a:max_text_width + + " Insert padding... + if a:y_pos >= b:WIN.y/2 + let min_padding_needed_for = gap_count + if tight + let min_pad_per_gap = max([ 1, s:trunc(rel_y * 6.0) ]) + else + let min_pad_per_gap = max([ 1, required_padding / gap_count ]) + let leftover_padding = required_padding - gap_count * min_pad_per_gap + let min_padding_needed_for = min([ gap_count, gap_count - leftover_padding ]) + endif + let padded_text = join(words[0 : min_padding_needed_for], repeat(" ", min_pad_per_gap)) + \ . repeat(" ", min_pad_per_gap+1) + \ . join(words[min_padding_needed_for+1 : -1], repeat(" ", min_pad_per_gap+1)) + let padded_text = substitute(padded_text, '\s*$', '', '') + + " Or remove chars (in the distance)... + elseif a:text =~ '\S' +" let delta = s:trunc( 8.0 * (b:WIN.y/2 - a:y_pos) ) +" let greeked_len = max([ 0, strlen(substitute(a:text, '^\s*\|\s*$', '', 'g')) - delta ]) + let greeked_len = tight ? stretched_width * (unpadded_width + gap_count) / a:max_text_width : stretched_width + let padded_text = repeat('~', greeked_len) + + " Or ignore it... + else + let padded_text = "" + + endif + + " Indent to centre... + let padded_text = substitute(padded_text, '\s*$', '', '') + let max_ever_padding = b:WIN.x - a:max_text_width + let indent = a:centred ? (b:WIN.x - strlen(padded_text))/2 + \ : indent + return repeat(" ", indent) . padded_text +endfunction + +function! SWC_gen_stars () + let star_count = b:WIN.x * s:STARFIELD_HEIGHT * b:WIN.y / s:STAR_DENSITY + let stars = [] + for n in range(star_count) + let x = RandomNumber(b:WIN.x) + 1 + let y = RandomNumber(s:STARFIELD_HEIGHT * b:WIN.y) + 1 + let stars += [{'y':y,'x':x}] + endfor + return stars +endfunction + +function! SWC_paint_stars (stars) + let max_x = b:WIN.x + for star in a:stars + let line = strpart(getline(star.y) . repeat(" ", max_x), 0, max_x) + let line = substitute(line, '\s\zs\%'.(star.x-1).'c\s\ze\s', '.', '') + call setline(star.y, line) + endfor +endfunction + +" Restore previous external compatibility options +let &cpo = s:save_cpo diff --git a/files/vim/plugin/plugin/dragvisuals.vim b/files/vim/plugin/plugin/dragvisuals.vim new file mode 100644 index 0000000..12c4f5d --- /dev/null +++ b/files/vim/plugin/plugin/dragvisuals.vim @@ -0,0 +1,345 @@ +" Vim global plugin for dragging virtual blocks +" Last change: Tue Jul 24 07:19:35 EST 2012 +" Maintainer: Damian Conway +" License: This file is placed in the public domain. + +"######################################################################### +"## ## +"## Add the following (uncommented) to your .vimrc... ## +"## ## +"## runtime plugin/dragvisuals.vim ## +"## ## +"## vmap <expr> <LEFT> DVB_Drag('left') ## +"## vmap <expr> <RIGHT> DVB_Drag('right') ## +"## vmap <expr> <DOWN> DVB_Drag('down') ## +"## vmap <expr> <UP> DVB_Drag('up') ## +"## vmap <expr> D DVB_Duplicate() ## +"## ## +"## " Remove any introduced trailing whitespace after moving... ## +"## let g:DVB_TrimWS = 1 ## +"## ## +"## Or, if you use the arrow keys for normal motions, choose ## +"## four other keys for block dragging. For example: ## +"## ## +"## vmap <expr> h DVB_Drag('left') ## +"## vmap <expr> l DVB_Drag('right') ## +"## vmap <expr> j DVB_Drag('down') ## +"## vmap <expr> k DVB_Drag('up') ## +"## ## +"## Or: ## +"## ## +"## vmap <expr> <S-LEFT> DVB_Drag('left') ## +"## vmap <expr> <S-RIGHT> DVB_Drag('right') ## +"## vmap <expr> <S-DOWN> DVB_Drag('down') ## +"## vmap <expr> <S-UP> DVB_Drag('up') ## +"## ## +"## Or even: ## +"## ## +"## vmap <expr> <LEFT><LEFT> DVB_Drag('left') ## +"## vmap <expr> <RIGHT><RIGHT> DVB_Drag('right') ## +"## vmap <expr> <DOWN><DOWN> DVB_Drag('down') ## +"## vmap <expr> <UP><UP> DVB_Drag('up') ## +"## ## +"######################################################################### + + +" If already loaded, we're done... +if exists("loaded_dragvirtualblocks") + finish +endif +let loaded_dragvirtualblocks = 1 + +" Preserve external compatibility options, then enable full vim compatibility... +let s:save_cpo = &cpo +set cpo&vim + +"====[ Implementation ]==================================== + +" Toggle this to stop trimming on drags... +if !exists('g:DVB_TrimWS') + let g:DVB_TrimWS = 1 +endif + +function! DVB_Drag (dir) + " No-op in Visual mode... + if mode() ==# 'v' + return "\<ESC>gv" + + " Do Visual Line drag indirectly via temporary nmap + " (to ensure we have access to block position data)... + elseif mode() ==# 'V' + " Set up a temporary convenience... + exec "nnoremap <silent><expr><buffer> M \<SID>Drag_Lines('".a:dir."')" + + " Return instructions to implement the move and reset selection... + return '"vyM' + + " Otherwise do Visual Block drag indirectly via temporary nmap + " (to ensure we have access to block position data)... + else + " Set up a temporary convenience... + exec "nnoremap <silent><expr><buffer> M \<SID>Drag_Block('".a:dir."')" + + " Return instructions to implement the move and reset selection... + return '"vyM' + endif +endfunction + +" Duplicate selected block and place to the right... +function! DVB_Duplicate () + exec "nnoremap <silent><expr><buffer> M \<SID>DuplicateBlock()" + return '"vyM' +endfunction + +function! s:DuplicateBlock () + nunmap <buffer> M + " Locate block boundaries... + let [buf_left, line_left, col_left, offset_left ] = getpos("'<") + let [buf_right, line_right, col_right, offset_right] = getpos("'>") + + " Identify special '$' blocks... + let dollar_block = 0 + let start_col = min([col_left+offset_left, col_right+offset_right]) + let end_col = max([col_left+offset_left, col_right+offset_right]) + let visual_width = end_col - start_col + 1 + for visual_line in split(getreg("v"),"\n") + if strlen(visual_line) > visual_width + let dollar_block = 1 + let visual_width = strlen(visual_line) + endif + endfor + let square_up = (dollar_block ? (start_col+visual_width-2).'|' : '') + + set virtualedit=all + return 'gv'.square_up.'yPgv' + \. (visual_width-dollar_block) . 'lo' . (visual_width-dollar_block) . 'l' + \. "y:set virtualedit=block\<CR>gv" + \. (dollar_block ? 'o$' : '') +endfunction + + +" Kludge to hide change reporting inside implementation... +let s:NO_REPORT = ":let b:DVB_report=&report\<CR>:let &report=1000000000\<CR>" +let s:PREV_REPORT = ":let &report = b:DVB_report\<CR>" + + +" Drag in specified direction in Visual Line mode... +function! s:Drag_Lines (dir) + " Clean up the temporary convenience... + nunmap <buffer> M + + " Locate block being shifted... + let [buf_left, line_left, col_left, offset_left ] = getpos("'<") + let [buf_right, line_right, col_right, offset_right] = getpos("'>") + + " Drag entire lines left if possible... + if a:dir == 'left' + " Are all lines indented at least one space??? + let lines = getline(line_left, line_right) + let all_indented = match(lines, '^[^ ]') == -1 + nohlsearch + + " If can't trim one space from start of each line, be a no-op... + if !all_indented + return 'gv' + + " Otherwise drag left by removing one space from start of each line... + else + return s:NO_REPORT + \ . "gv:s/^ //\<CR>" + \ . s:PREV_REPORT + \ . "gv" + endif + + " To drag entire lines right, add a space in column 1... + elseif a:dir == 'right' + return s:NO_REPORT + \ . "gv:s/^/ /\<CR>:nohlsearch\<CR>" + \ . s:PREV_REPORT + \ . "gv" + + " To drag entire lines upwards... + elseif a:dir == 'up' + let EOF = line('$') + + " Can't drag up if at first line... + if line_left == 1 || line_right == 1 + return 'gv' + + " Needs special handling at EOF (because cursor moves up on delete)... + elseif line_left == EOF || line_right == EOF + let height = line_right - line_left + let select_extra = height ? height . 'j' : "" + return s:NO_REPORT + \ . 'gvxP' + \ . s:PREV_REPORT + \ . 'V' . select_extra + + " Otherwise just cut-move-paste-reselect... + else + let height = line_right - line_left + let select_extra = height ? height . 'j' : "" + return s:NO_REPORT + \ . 'gvxkP' + \ . s:PREV_REPORT + \ . 'V' . select_extra + endif + + " To drag entire lines downwards... + elseif a:dir == 'down' + let EOF = line('$') + + " This is how much extra we're going to have to reselect... + let height = line_right - line_left + let select_extra = height ? height . 'j' : "" + + " Needs special handling at EOF (to push selection down into new space)... + if line_left == EOF || line_right == EOF + return "O\<ESC>gv" + + " Otherwise, just cut-move-paste-reselect... + else + return s:NO_REPORT + \ . 'gvxp' + \ . s:PREV_REPORT + \ . 'V' . select_extra + endif + + endif +endfunction + +" Drag in specified direction in Visual Block mode... +function! s:Drag_Block (dir) + " Clean up the temporary convenience... + nunmap <buffer> M + + " Locate block being shifted... + let [buf_left, line_left, col_left, offset_left ] = getpos("'<") + let [buf_right, line_right, col_right, offset_right] = getpos("'>") + + " Identify special '$' blocks... + let dollar_block = 0 + let start_col = min([col_left+offset_left, col_right+offset_right]) + let end_col = max([col_left+offset_left, col_right+offset_right]) + let visual_width = end_col - start_col + 1 + for visual_line in split(getreg("v"),"\n") + if strlen(visual_line) > visual_width + let dollar_block = 1 + let visual_width = strlen(visual_line) + endif + endfor + let square_up = (dollar_block ? (start_col+visual_width-2).'|' : '') + + " Drag left... + if a:dir == 'left' + "Can't drag left at left margin... + if col_left == 1 || col_right == 1 + return 'gv' + + " Otherwise reposition one column left (and optionally trim any whitespace)... + elseif g:DVB_TrimWS + " May need to be able to temporarily step past EOL... + let prev_ve = &virtualedit + set virtualedit=all + + " Are we moving past other text??? + let square_up_final = "" + if dollar_block + let lines = getline(line_left, line_right) + if match(lines, '^.\{'.(start_col-2).'}\S') >= 0 + let dollar_block = 0 + let square_up_final = (start_col+visual_width-3).'|' + endif + endif + + let vcol = start_col - 2 + return 'gv'.square_up.'xhP' + \ . s:NO_REPORT + \ . "gvhoho:s/\\s*$//\<CR>gv\<ESC>" + \ . ':set virtualedit=' . prev_ve . "\<CR>" + \ . s:PREV_REPORT + \ . ":nohlsearch\<CR>gv" + \ . (dollar_block ? '$' : square_up_final ) + else + return 'gv'.square_up.'xhPgvhoho' + endif + + " Drag right... + elseif a:dir == 'right' + " May need to be able to temporarily step past EOL... + let prev_ve = &virtualedit + set virtualedit=all + + " Reposition block one column to the right... + if g:DVB_TrimWS + let vcol = start_col + return 'gv'.square_up.'xp' + \ . s:NO_REPORT + \ . "gvlolo" + \ . ":s/\\s*$//\<CR>gv\<ESC>" + \ . ':set virtualedit=' . prev_ve . "\<CR>" + \ . s:PREV_REPORT + \ . (dollar_block ? 'gv$' : 'gv') + else + return 'gv'.square_up.'xp:set virtualedit=' . prev_ve . "\<CR>gvlolo" + endif + + " Drag upwards... + elseif a:dir == 'up' + " Can't drag upwards at top margin... + if line_left == 1 || line_right == 1 + return 'gv' + endif + + " May need to be able to temporarily step past EOL... + let prev_ve = &virtualedit + set virtualedit=all + + " If trimming whitespace, jump to just below block to do it... + if g:DVB_TrimWS + let height = line_right - line_left + 1 + return 'gv'.square_up.'xkPgvkoko"vy' + \ . height + \ . 'j:s/\s*$//' + \ . "\<CR>:nohlsearch\<CR>:set virtualedit=" + \ . prev_ve + \ . "\<CR>gv" + \ . (dollar_block ? '$' : '') + + " Otherwise just move and reselect... + else + return 'gv'.square_up.'xkPgvkoko"vy:set virtualedit=' + \ . prev_ve + \ . "\<CR>gv" + \ . (dollar_block ? '$' : '') + endif + + " Drag downwards... + elseif a:dir == 'down' + " May need to be able to temporarily step past EOL... + let prev_ve = &virtualedit + set virtualedit=all + + " If trimming whitespace, move to just above block to do it... + if g:DVB_TrimWS + return 'gv'.square_up.'xjPgvjojo"vyk:s/\s*$//' + \ . "\<CR>:nohlsearch\<CR>:set virtualedit=" + \ . prev_ve + \ . "\<CR>gv" + \ . (dollar_block ? '$' : '') + + " Otherwise just move and reselect... + else + return 'gv'.square_up.'xjPgvjojo"vy' + \ . "\<CR>:set virtualedit=" + \ . prev_ve + \ . "\<CR>gv" + \ . (dollar_block ? '$' : '') + endif + endif +endfunction + + +" Restore previous external compatibility options +let &cpo = s:save_cpo + diff --git a/files/vim/plugin/plugin/rng.vim b/files/vim/plugin/plugin/rng.vim new file mode 100644 index 0000000..51c9991 --- /dev/null +++ b/files/vim/plugin/plugin/rng.vim @@ -0,0 +1,83 @@ +" George Marsaglia's Multiply-with-carry Random Number Generator {{{ +" Modified to work within Vim's semantics +let s:m_w = 1 + getpid() +let s:m_z = localtime() + +" not sure of the wisdom of generating a full 32-bit RN here +" and then using abs() on the sucker. Feedback welcome. +function! RandomNumber(...) + if a:0 == 0 + let s:m_z = (36969 * and(s:m_z, 0xffff)) + (s:m_z / 65536) + let s:m_w = (18000 * and(s:m_w, 0xffff)) + (s:m_w / 65536) + return (s:m_z * 65536) + s:m_w " 32-bit result + elseif a:0 == 1 " We return a number in [0, a:1] or [a:1, 0] + return a:1 < 0 ? RandomNumber(a:1,0) : RandomNumber(0,a:1) + else " if a:2 >= 2 + return abs(RandomNumber()) % (abs(a:2 - a:1) + 1) + a:1 + endif +endfunction +" end RNG }}} + +" RandomChar(base, cap) +" base : the lowest char number desired +" cap : the highest char number desired +" Defaults to ASCII characters in the range +" 33-126 (!-~) +" But it's capable of much wider character tables +function! RandomChar(...) + let base = 33 + let cap = 126 + if a:0 > 0 + let base = a:1 + endif + if a:0 > 1 + let cap = a:2 + endif + return nr2char(RandomNumber(base, cap)) +endfunction + +function! RandomCharsInSet(length, set) + let from = join(map(range(len(a:set)), 'nr2char(char2nr("a")+v:val)'), '') + let to = join(a:set, '') + return map(RandomChars(a:length, 97, 96+len(a:set)), 'tr(v:val, from, to)') +endfunction + +function! RandomChars(length, ...) + let args = [] + if a:0 > 0 + if type(a:1) == type([]) + let args = a:1 + else + let args = a:000 + endif + endif + return map(repeat([0], a:length), 'call("RandomChar", args)') +endfunction + +function! RandomString(length, ...) + let args = [] + if a:0 > 0 + if type(a:1) == type([]) + let args = a:1 + else + let args = a:000 + endif + endif + return join(call('RandomChars', [a:length, args]), '') +endfunction + +let s:chars = '! " # $ % & '' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~' +let s:charlist = split(s:chars, ' ') + +function! RandomCharFromRegex(regex, ...) + let charlist = a:0 ? split(a:1, '\zs') : copy(s:charlist) + call filter(charlist, 'v:val =~ a:regex') + return charlist[RandomNumber(0, len(charlist) - 1)] +endfunction + +function! RandomStringFromRegex(regex, lenght, ...) + let charlist = a:0 ? split(a:1, '\zs') : copy(s:charlist) + call filter(charlist, 'v:val =~ a:regex') + let len = len(charlist) - 1 + return join(map(range(a:lenght), 'charlist[RandomNumber(0, len)]'), '') +endfunction |