diff --git a/vimrc b/vimrc index 8210ec0..896ecaf 100644 --- a/vimrc +++ b/vimrc @@ -87,11 +87,52 @@ noremap d "_d noremap x "_x noremap x x +" === GENERAL UTILITIES === +function! MatchingLines(pattern) + let list = [] + let pattern = a:pattern + exec "g/".pattern."/ call add(list, expand('%').'('.line('.').') : '.matchstr(getline('.'), '".pattern."'))" + return list +endfunc + +function! s:mld_helper(list, pattern) + " Helper function for MatchingLinesDict + call add(a:list, {'filename': expand("%"), 'lnum': line("."), 'col': match(getline("."), a:pattern)+1, 'text': matchstr(getline("."), a:pattern)}) +endfunc +function! MatchingLinesDict(pattern) + let list = [] + silent! exec "g/".a:pattern."/ call s:mld_helper(list, a:pattern)" + return list +endfunc + +function! LocationAddLineCol(filename, lnum, text, col) + call setloclist(0, [{'filename': a:filename, 'lnum': a:lnum, 'desc': a:text, 'col': a:col}], 'a') +endfunction + +function! QuickfixAddLineCol(filename, lnum, text, col) + call setqflist([{'filename': a:filename, 'lnum': a:lnum, 'desc': a:text, 'col': a:col}], 'a') +endfunction + +function! LocationAddLine(filename, lnum, text) + call setloclist(0, [{'filename': a:filename, 'lnum': a:lnum, 'desc': a:text}], 'a') +endfunction + +function! QuickfixAddLine(filename, lnum, text) + call setqflist([{'filename': a:filename, 'lnum': a:lnum, 'desc': a:text}], 'a') +endfunction + " === GENERAL COMMANDS === command! L lopen | set number | set norelativenumber +command! LAddLine call LocationAddLine(expand("%"), line("."), getline(".")) +command! QAddLine call QuickfixAddLine(expand("%"), line("."), getline(".")) +command! LAddCursor call LocationAddLineCol(expand("%"), line("."), getline("."), col(".")) +command! QAddCursor call QuickfixAddLineCol(expand("%"), line("."), getline("."), col(".")) -command! Fixme cex MatchingLines("\\cfixme.*") -command! Todo cex MatchingLines("\\ctodo.*") +command! Fixme lex MatchingLines("\\c\\)) +command! -nargs=1 QFind call setqflist(MatchingLinesDict()) " === GENERAL KEY MAPPINGS === let mapleader = "\\" @@ -165,14 +206,6 @@ digraph oe 246 digraph OE 214 digraph ss 223 -" === GENERAL UTILITIES === -function! MatchingLines(pattern) - let list = [] - let pattern = a:pattern - exec "g/".pattern."/ call add(list, expand('%').'('.line('.').') : '.matchstr(getline('.'), '".pattern."'))" - return list -endfunc - " === GENERAL AUTOCOMMANDS === nnoremap h :call toggleWUC() @@ -323,6 +356,7 @@ function! s:init_vim_file() command! -buffer Functions lex MatchingLines("^\\s*fun\\(ction\\)\\?\\>!.*$") command! -buffer Commands lex MatchingLines("^\\s*com\\(mand\\)\\?\\>!.*$") + command! -buffer Autocommands lex MatchingLines("^\\s*au\\(tocmd\\)\\?\\>!\\@!.*$") endfunction " --- C / C++ Stuff --- @@ -338,11 +372,11 @@ au BufNewFile,BufRead *.c,*.cpp,*.h,*.hpp :nnoremap ; m'$a;`' au BufNewFile,BufRead *.rb :call init_ruby_file() function! s:init_ruby_file() - command! -buffer Defines lex MatchingLines("^\\s*def\\>.*$") + command! -buffer Defines lex MatchingLines("^\\s*def\\>\\s\\+\\zs.*$") command! -buffer Functions Defines " Alias command! -buffer Methods Defines " Alias - command! -buffer Classes lex MatchingLines("^\\s*class\\>.*$") - command! -buffer Modules lex MatchingLines("^\\s*module\\>.*$") + command! -buffer Classes lex MatchingLines("^\\s*class\\>\\s\\+\\zs.*$") + command! -buffer Modules lex MatchingLines("^\\s*module\\>\\s\\+\\zs.*$") nnoremap ic oclass m'end`'a nnoremap id odef m'()end`'a @@ -365,7 +399,7 @@ function! s:RubyComment(a) endfunction augroup rbindent -autocmd! + autocmd! au BufNewFile,BufRead *.rb :set noexpandtab au BufNewFile,BufRead *.rb :retab! @@ -374,12 +408,25 @@ autocmd! au BufWritePre *.rb :retab au BufWritepost *.rb :set noexpandtab - au BufWritepost *.rb :retab! + au BufWritepost *.rb :silent! :undo :normal augroup END -" --- LUA STUFF --- +" --- Lua Stuff --- au BufNewFile,BufRead *.lua :call init_lua_file() function! s:init_lua_file() command! -buffer Requires lex MatchingLines("^\\s*require\\>.*$") endfunction! + +" --- HTML Stuff --- +au BufNewFile,BufRead *.html,*.htm :call init_html_file() + +function! s:init_html_file() + command! -buffer -nargs=1 Tag normal + \ i<><m'/>`' + nnoremap t ""ciw<""p>m'""p>`'l + nnoremap T ""diw"_cc<""p>o""p>O + + inoremap ""ciw<""p>m'""p>`'l + inoremap ""diw"_cc<""p>o""p>O +endfunction