From 33bfafb50ea8a9842cb41e599f487e3ee0146618 Mon Sep 17 00:00:00 2001 From: mitsuo Date: Mon, 22 Nov 2021 05:36:18 -0500 Subject: Restructure directory, Fix install.sh --- vim/fun.vim | 83 ++++++++++++++++++ vim/vimrc | 285 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 368 insertions(+) create mode 100644 vim/fun.vim create mode 100644 vim/vimrc (limited to 'vim') diff --git a/vim/fun.vim b/vim/fun.vim new file mode 100644 index 0000000..0dbfe11 --- /dev/null +++ b/vim/fun.vim @@ -0,0 +1,83 @@ +" Echoes longest line number and lenght. + +function! LongestLineLength ( ) + let maxlength = 0 + let linenumber= 1 + while linenumber <= line("$") + exe ":".linenumber + let linelength = virtcol("$") + if maxlength < linelength + let maxlength = linelength + let maxlinenumber = linenumber + endif + let linenumber = linenumber+1 + endwhile + +"exe ':0' +"exe 'normal O' +"exe 'normal 0C'.maxlength + exe "normal" . maxlinenumber . "G" + exe ":echo \"" . maxlinenumber . ": " . maxlength . "\"" +endfunction + +command LongestLineLength call LongestLineLength() + + +" Save markdown document and export to pdf using pandoc. +" +" It would be nicer if a default document would be used but I coulnd't made it +" to work even after reading that manual section like 2 times. Also, there are +" variables that are lists of other variables that I don't know how to make them +" work (e.g. geometry=[top=1in, bottom=1in, heightrounded]) + +function! Md2Pdf ( ) + exe ":w" + "-N for numbered headers + exe ":! pandoc -o \"" . expand("%:r") . ".pdf\" -t latex --variable classoption=twosides --variable papersize=a4 --variable margin-left=1in --variable margin-right=1in --variable margin-top=1in --variable margin-bottom=1in --variable links-as-notes --variable colorlinks --variable pagestyle=plain --variable documentclass=article -f markdown-implicit_figures \"" . expand("%") . "\"" + echo "pdf saved as \"" . expand("%:p:r") . ".pdf\"" +endfunction + +function! Md2Pdfms ( ) + exe ":w" + exe ":! pandoc -o " . expand("%:r") . ".pdf" . " -t ms -f markdown-implicit_figures \"" . expand("%") . "\"" + echo "pdf saved as " . expand("%:p:r") . ".pdf" +endfunction + +command Md2Pdf call Md2Pdf() +command Md2Pdfms call Md2Pdfms() + + +" Save markdown document and export to html using pandoc + +function! Md2Html ( ) + exe ":w" + exe ":! pandoc -o \"" . expand("%:r") . ".html\"" . " -s \"" . expand("%") . "\"" + echo "html saved as " . expand("%:p:r") . ".html" +endfunction + +command Md2Html call Md2Html() + +" Compiles and Runs a C++ project + +" TODO: how to add program's arguments or file redirectioning from command. +function! CompRunProj ( ) + exe ":w" + exe ":! g++ -o " . expand("%:r") . "-g *.cpp" + exe ":! ./" . expand("%:r") +endfunction + +command CompRunProj call CompRunProj() + + +" Function made to give feedback to students code in 1INF01 + +" export C code to syntax highlighted pdf +function! C2Pdf ( ) + exe ":set ts=4" + exe ":w" + exe ":ha > %.ps" + exe ":!ps2pdf %.ps" + exe ":!rm %.ps" +endfunction + +command C2Pdf call C2Pdf() diff --git a/vim/vimrc b/vim/vimrc new file mode 100644 index 0000000..83aab15 --- /dev/null +++ b/vim/vimrc @@ -0,0 +1,285 @@ +" mitsuo's vimrc +" Created c. 2019-11-11 +" Last update (after destroying it accidentally): 2020-09-02 +" +" ┌─┬─┬─┬─┬─┬─┐ +" │m│i│t│s│u│o│✓x け が +" ├─┼─┼─┼─┼─┼─┤ ん +" │v│i│m│r│c│←│█▓▒░ り ば +" └─┴─┴─┴─┴─┴─┘ こ れ + +" XDG compliant REMOVED :D (what a pain) +" - For new installs just copy (or link) this file into ~/.vimrc and create +" the ~/.vim directory +" TODO: - sort sections + + +" Variables +" ---------------------------------------------------------------------- +set undodir=~/.vim/undo +set viminfofile=~/.vim/viminfo +set viewdir=~/.vim/view + + +" Useful +" ---------------------------------------------------------------------- +set nocompatible +" Auto-recognize files and apply pluggins +filetype plugin indent on " See :h vimrc-filetype +syntax on + +" Search files +set wildmenu " command-line completion <-- soo good +set wildignore+=*.o,*.obj,.git,*.rbc,*.class +set path+=./**30 " For gf and :find, add all subdirectories relative to + " current file (30 max) to the "search space" + +set scrolloff=5 " show a few lines of context + +set backspace=indent,eol,start " Allow and in insert mode + +" number gutter +set nonumber +set norelativenumber + +" Store session information +set viminfo+='1000 + +" Tag Jumping <-- so cool +" Instructions: create tag index (e.g. $ ctags -R .) +" place cursor on tag +" ^] to jump to definition +" g^] if more than 1 definition +" ^T to return (or ^O) +" TODO: create tags automatically (:!ctags -R . after :w if ft=c) + + +" Status line +" ---------------------------------------------------------------------- +set showcmd " show partial command on last line (below status bar) +" just add buffer number to the default +set statusline=%<%f\ %h%m%r%=b%02n\ \ %-14.(%l,%c%V%)\ %P + + +" Search +" ---------------------------------------------------------------------- +set hlsearch " highlight search (this can be annoying if no shortcut to then + " clear the highlight +set incsearch " Incrementally move cursor while typing search-string +" stop highlight only for current search. +" (Still preserve updating directory in netrw) +nnoremap :nohl +" Ignore case only when pattern is lowercase (both needed) +set ignorecase +set smartcase + + +" Indentation +" ---------------------------------------------------------------------- +" 4 column softtabs (uses ' ', not '\t'). +" TODO: move this 'guide' to somewhere apropiate +" tab->softtab :set tabstop=n :set expandtab :retab +" softtab->tab :set noexpandtab :set tabstop={softtabstop} :retab! +" Caution: +" - This will insert a tab wherever it can, even between words +" separated by as few as 2 spaces if ts=2! +" - Not recommended at all. Use some other program to only translate +" leading indenting from space to tabs. Also using tabs is not very +" good. My opinion is that they are good as a special character to +" separate data (like comma for CSV). +set tabstop=8 " '\t' or HT = 8 virtual columns +set shiftwidth=4 " Indentation with >> and C-T and C-D (insert mode) +set softtabstop=4 " For "inserted tabs" (inserts and + " minimizing ) +set expandtab " Expand with the inserted s +"set smarttab " Use shiftwidth for inserted in the front of + " a line (Maybe useful for YAML) +" autoindent -> smartindent -> cindent -> indentexpr +" (from simple/less general to complex/more general) +set smartindent " This is a really nice and simple one +"set cindent +"set cinoptions=:0,g0 " See C-indenting + + +" Automatic formatting +" ---------------------------------------------------------------------- +" see fo-table +set formatoptions=l " Don't break long lines that are already typed +set formatoptions+=q " Allow formatting of comments with "gq" +set formatoptions+=r " Insert current leader after in Insert mode +set formatoptions-=o " Automatically insert the current comment leader + " after hitting 'o'. +set formatoptions+=t " auto-wrap text (when inserting) +set formatoptions+=c " auto-wrap comments (when inserting) +set formatoptions+=p " Don't break honorifics like Prof. Smith +set formatoptions+=n " Allow lists +set formatoptions+=j " Removes comment leader when joining lines + + +" Word wrap +" ---------------------------------------------------------------------- +set wrap " Visual wrapping of lines wider than window +set linebreak " Works with previous option to not break words +" To 'justify' comments or block of text (paragraph) use "gq{motion}" or +" "gp{motion}", where {motion} can be "[/", "]/", "ip", "i{", "a{". +set textwidth=80 " auto break inserted text longer than 80 colums + + +" Other settings +" ---------------------------------------------------------------------- +set mouse=a " Enable for all modes +" set cmdheight=1 +" Always display the status line, even if only one window is displayed +set laststatus=2 +set ruler +set encoding=utf-8 +set more " Enable more-prompt for listings that don't fit in + " screen +"hint: g< command can be used to see the last page of previous command. + + +" Mappings +" ---------------------------------------------------------------------- +" F1 is help, F11 is full screen (terminal emulator) +map :source ~/.vim/vimrc +map :e ~/.vim/vimrc +map :tabp +map :tabn +map :w:make +"map :!./%:r +map :!./a.out +map :cnext +map :cprev +" One has to do :E first in order for this to work +"map :Rex +" = '\' when 'mapleader' is empty +" Change to the directory of the current file and generate tags recursively +" there. +" TODO: make the change of directory whenever a .c .cpp .h file is opened +map rt :cd %:h:!ctags -R . +map :tnext +" Motion to go to beggining of function while cursor is inside +nmap [f [m[{k0 + +" Funcionallity of the following depends on terminal (8bit input enabled needed +" for = Alt key combos +" From: https://vim.fandom.com/wiki/Get_Alt_key_to_work_in_terminal + +nmap h +nmap j +nmap k +nmap l + +" Go Title Case (and clear highlighted matches) +" Ref.: vim.fandom.com +vmap gt :s/\<\(\w\)\(\w*\)\>/\u\1\L\2/g + + +" Yanking and pasting +" ---------------------------------------------------------------------- +" TODO: map something to "+y (cut buffer) and "*y (selection buffer) while in +" visual mode. +"vmap <++> "+y " The yank to the cut buffer (clipboard) +"vmap <++> "*y " The yank to the selection buffer + + +" Buffers +" ---------------------------------------------------------------------- +set hidden +map :bNext +map :bnext + + +" Printing +" ---------------------------------------------------------------------- +set printoptions=paper:A4,duplex:long +" set printoptions+=number:y +" TODO: Figure out how to print multibyte encodings. Enabling this settings +" produces errors. +set encoding=utf-8 +set fileencoding=utf-8 +" set printmbcharset=JIS_X_1990 " This allows Japanese characters to be printed +" set printmbfont=r:Noto-Sans-CJK-JP + + +" Functions +" ---------------------------------------------------------------------- +" TODO: maybe replace with $runtimepath +source ~/.vim/fun.vim + + +" Views and Sessions (Window layout and Line folding) +" ---------------------------------------------------------------------- +" It is possible to create folds automatically but idk how to do it. +" :mkview so save them :loadview to load them (zo open one, zc close one, +" zR to open all, zM to close all, zx to restore)) + +" Views saves folds. Sessions saves all windows configuration and layout +" Load Sessions with $ vim -S Session.vim + +" To automatically save and restore views for *.c *.cpp files: +au BufWinLeave *.c mkview +au BufWinEnter *.c silent loadview +au BufWinLeave *.cpp mkview +au BufWinEnter *.cpp silent loadview + + +" Snippets +" ---------------------------------------------------------------------- +" I deleted the file accidently +"nnoremap ,ch :-1r ~/.vim/snippets/cheader.c + + +" File Browsing +" ---------------------------------------------------------------------- +" Use netrw out of the box file browser plugin. +" :e . open file browser on current directory +" V or t open file on vsplit or new tab. +" :bd or :Rex to return +" More mappings on |netrw-browse-maps| +"let g:netrw_banner=0 " disable banner +"let g:netrw_browse_split=4 " open in prior window +let g:netrw_altv=1 " open splits to the right +"let g:netrw_list_hide=netrw_gitignore#Hide() +"let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+' " wtf? (?) +" Learned from Max Cantor talk https://youtu.be/XA2WjJbmmoM + + +" Additions +" ---------------------------------------------------------------------- +" Replaces previous WORD arithmetic expression with result (from Vim +" fandom-wiki) +inoremap diWi=" + + +" Plugins +" ---------------------------------------------------------------------- +" I disabled it bc I think it interferes with formatoptions +"" Automatic vim-plug install +"if empty(glob('~/.vim/autoload/plug.vim')) +" silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs +" \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim +" autocmd VimEnter * PlugInstall --sync | source $MYVIMRC +"endif +" +"call plug#begin() +"Plug 'ARM9/arm-syntax-vim' +"autocmd BufNewFile,BufRead *.s,*.S set filetype=arm " arm = armv6/7 +" +"call plug#end() + +" Other plugins +source ~/.vim/plugins/IndexedSearch.vim + + +" Colors +" ---------------------------------------------------------------------- +" ADDME :) + + +" Ducktape (place this in ~/.vim/after (after directory)) +" ---------------------------------------------------------------------- +" Not even the ducktape worked for this one on C files TODO +set formatoptions-=o " Automatically insert the current comment leader +" TODO: fix this shit getting reset in a markdown text +set formatoptions+=r " auto insert comment leader after -- cgit v1.2.3