From: Stefan Huber Date: Mon, 24 Nov 2014 11:52:32 +0000 (+0100) Subject: vim: Update config files and scripts X-Git-Url: https://git.sthu.org/?a=commitdiff_plain;h=9fef42756f5fd61ea6b19d1c4cd628c8d9fa92ce;p=shutils.git vim: Update config files and scripts --- diff --git a/dotfiles/vim/.gvimrc b/dotfiles/vim/.gvimrc index 1e5b38e..8bbfa5e 100644 --- a/dotfiles/vim/.gvimrc +++ b/dotfiles/vim/.gvimrc @@ -7,25 +7,25 @@ endif set lines=25 -set columns=85 +set columns=88 set cursorline set mousehide -colorscheme shuber-wombat - function SetPresentationFont(mode) if a:mode - set guifont=Monospace\ Bold\ 12 + set guifont=Liberation\ Mono\ for\ Powerline\ 12,Monospace\ Bold\ 12 else - set guifont=Monospace\ 10 + set guifont=Liberation\ Mono\ for\ Powerline\ 10,Monospace\ 10 endif endfunction :menu Presentation.On :call SetPresentationFont(1) :menu Presentation.Off :call SetPresentationFont(0) +call SetPresentationFont(0) + "" {{{ vimrc.local diff --git a/dotfiles/vim/.vim/autoload/pathogen.vim b/dotfiles/vim/.vim/autoload/pathogen.vim new file mode 100644 index 0000000..ff7dba3 --- /dev/null +++ b/dotfiles/vim/.vim/autoload/pathogen.vim @@ -0,0 +1,139 @@ +" pathogen.vim - path option manipulation +" Maintainer: Tim Pope +" Version: 1.2 + +" Install in ~/.vim/autoload (or ~\vimfiles\autoload). +" +" API is documented below. + +if exists("g:loaded_pathogen") || &cp + finish +endif +let g:loaded_pathogen = 1 + +" Split a path into a list. +function! pathogen#split(path) abort " {{{1 + if type(a:path) == type([]) | return a:path | endif + let split = split(a:path,'\\\@ output + silent filetype + redir END + let result = {} + let result.detection = match(output,'detection:ON') >= 0 + let result.indent = match(output,'indent:ON') >= 0 + let result.plugin = match(output,'plugin:ON') >= 0 + return result +endfunction " }}}1 + +" \ on Windows unless shellslash is set, / everywhere else. +function! pathogen#separator() abort " {{{1 + return !exists("+shellslash") || &shellslash ? '/' : '\' +endfunction " }}}1 + +" Convenience wrapper around glob() which returns a list. +function! pathogen#glob(pattern) abort " {{{1 + let files = split(glob(a:pattern),"\n") + return map(files,'substitute(v:val,"[".pathogen#separator()."/]$","","")') +endfunction "}}}1 + +" Like pathogen#glob(), only limit the results to directories. +function! pathogen#glob_directories(pattern) abort " {{{1 + return filter(pathogen#glob(a:pattern),'isdirectory(v:val)') +endfunction "}}}1 + +" Prepend all subdirectories of path to the rtp, and append all after +" directories in those subdirectories. +function! pathogen#runtime_prepend_subdirectories(path) " {{{1 + let sep = pathogen#separator() + let before = pathogen#glob_directories(a:path.sep."*[^~]") + let after = pathogen#glob_directories(a:path.sep."*[^~]".sep."after") + let rtp = pathogen#split(&rtp) + let path = expand(a:path) + call filter(rtp,'v:val[0:strlen(path)-1] !=# path') + let &rtp = pathogen#join(pathogen#uniq(before + rtp + after)) + return &rtp +endfunction " }}}1 + +" For each directory in rtp, check for a subdirectory named dir. If it +" exists, add all subdirectories of that subdirectory to the rtp, immediately +" after the original directory. If no argument is given, 'bundle' is used. +" Repeated calls with the same arguments are ignored. +function! pathogen#runtime_append_all_bundles(...) " {{{1 + let sep = pathogen#separator() + let name = a:0 ? a:1 : 'bundle' + let list = [] + for dir in pathogen#split(&rtp) + if dir =~# '\ +" +" We grant permission to use, copy modify, distribute, and sell this +" software for any purpose without fee, provided that the above copyright +" notice and this text are not removed. We make no guarantee about the +" suitability of this software for any purpose and we are not liable +" for any damages resulting from its use. Further, we are under no +" obligation to maintain or extend this software. It is provided on an +" "as is" basis without any expressed or implied warranty. + +" Directory & regex enhancements added by Bindu Wavell who is well known on +" vim.sf.net +" +" Patch for spaces in files/directories from Nathan Stien (also reported by +" Soeren Sonnenburg) + +" Do not load a.vim if is has already been loaded. +if exists("loaded_alternateFile") + finish +endif +if (v:progname == "ex") + finish +endif +let loaded_alternateFile = 1 + +let alternateExtensionsDict = {} + +" setup the default set of alternate extensions. The user can override in thier +" .vimrc if the defaults are not suitable. To override in a .vimrc simply set a +" g:alternateExtensions_ variable to a comma separated list of alternates, +" where is the extension to map. +" E.g. let g:alternateExtensions_CPP = "inc,h,H,HPP,hpp" +" let g:alternateExtensions_{'aspx.cs'} = "aspx" + + +" This variable will be increased when an extension with greater number of dots +" is added by the AddAlternateExtensionMapping call. +let s:maxDotsInExtension = 1 + +" Function : AddAlternateExtensionMapping (PRIVATE) +" Purpose : simple helper function to add the default alternate extension +" mappings. +" Args : extension -- the extension to map +" alternates -- comma separated list of alternates extensions +" Returns : nothing +" Author : Michael Sharpe +function! AddAlternateExtensionMapping(extension, alternates) + " This code does not actually work for variables like foo{'a.b.c.d.e'} + "let varName = "g:alternateExtensions_" . a:extension + "if (!exists(varName)) + " let g:alternateExtensions_{a:extension} = a:alternates + "endif + + " This code handles extensions which contains a dot. exists() fails with + " such names. + "let v:errmsg = "" + " FIXME this line causes ex to return 1 instead of 0 for some reason?? + "silent! echo g:alternateExtensions_{a:extension} + "if (v:errmsg != "") + "let g:alternateExtensions_{a:extension} = a:alternates + "endif + + let g:alternateExtensionsDict[a:extension] = a:alternates + let dotsNumber = strlen(substitute(a:extension, "[^.]", "", "g")) + if s:maxDotsInExtension < dotsNumber + let s:maxDotsInExtension = dotsNumber + endif +endfunction + + +" Add all the default extensions +" Mappings for C and C++ +call AddAlternateExtensionMapping('h',"c,cpp,cxx,cc,CC") +call AddAlternateExtensionMapping('H',"C,CPP,CXX,CC") +call AddAlternateExtensionMapping('hpp',"cpp,c") +call AddAlternateExtensionMapping('HPP',"CPP,C") +call AddAlternateExtensionMapping('c',"h") +call AddAlternateExtensionMapping('C',"H") +call AddAlternateExtensionMapping('cpp',"h,hpp") +call AddAlternateExtensionMapping('CPP',"H,HPP") +call AddAlternateExtensionMapping('cc',"h") +call AddAlternateExtensionMapping('CC',"H,h") +call AddAlternateExtensionMapping('cxx',"h") +call AddAlternateExtensionMapping('CXX',"H") +" Mappings for PSL7 +call AddAlternateExtensionMapping('psl',"ph") +call AddAlternateExtensionMapping('ph',"psl") +" Mappings for ADA +call AddAlternateExtensionMapping('adb',"ads") +call AddAlternateExtensionMapping('ads',"adb") +" Mappings for lex and yacc files +call AddAlternateExtensionMapping('l',"y,yacc,ypp") +call AddAlternateExtensionMapping('lex',"yacc,y,ypp") +call AddAlternateExtensionMapping('lpp',"ypp,y,yacc") +call AddAlternateExtensionMapping('y',"l,lex,lpp") +call AddAlternateExtensionMapping('yacc',"lex,l,lpp") +call AddAlternateExtensionMapping('ypp',"lpp,l,lex") +" Mappings for OCaml +call AddAlternateExtensionMapping('ml',"mli") +call AddAlternateExtensionMapping('mli',"ml") +" ASP stuff +call AddAlternateExtensionMapping('aspx.cs', 'aspx') +call AddAlternateExtensionMapping('aspx.vb', 'aspx') +call AddAlternateExtensionMapping('aspx', 'aspx.cs,aspx.vb') + +" Setup default search path, unless the user has specified +" a path in their [._]vimrc. +if (!exists('g:alternateSearchPath')) + let g:alternateSearchPath = 'sfr:../source,sfr:../src,sfr:../include,sfr:../inc' +endif + +" If this variable is true then a.vim will not alternate to a file/buffer which +" does not exist. E.g while editing a.c and the :A will not swtich to a.h +" unless it exists. +if (!exists('g:alternateNoDefaultAlternate')) + " by default a.vim will alternate to a file which does not exist + let g:alternateNoDefaultAlternate = 0 +endif + +" If this variable is true then a.vim will convert the alternate filename to a +" filename relative to the current working directory. +" Feature by Nathan Huizinga +if (!exists('g:alternateRelativeFiles')) + " by default a.vim will not convert the filename to one relative to the + " current working directory + let g:alternateRelativeFiles = 0 +endif + + +" Function : GetNthItemFromList (PRIVATE) +" Purpose : Support reading items from a comma seperated list +" Used to iterate all the extensions in an extension spec +" Used to iterate all path prefixes +" Args : list -- the list (extension spec, file paths) to iterate +" n -- the extension to get +" Returns : the nth item (extension, path) from the list (extension +" spec), or "" for failure +" Author : Michael Sharpe +" History : Renamed from GetNthExtensionFromSpec to GetNthItemFromList +" to reflect a more generic use of this function. -- Bindu +function! GetNthItemFromList(list, n) + let itemStart = 0 + let itemEnd = -1 + let pos = 0 + let item = "" + let i = 0 + while (i != a:n) + let itemStart = itemEnd + 1 + let itemEnd = match(a:list, ",", itemStart) + let i = i + 1 + if (itemEnd == -1) + if (i == a:n) + let itemEnd = strlen(a:list) + endif + break + endif + endwhile + if (itemEnd != -1) + let item = strpart(a:list, itemStart, itemEnd - itemStart) + endif + return item +endfunction + +" Function : ExpandAlternatePath (PRIVATE) +" Purpose : Expand path info. A path with a prefix of "wdr:" will be +" treated as relative to the working directory (i.e. the +" directory where vim was started.) A path prefix of "abs:" will +" be treated as absolute. No prefix or "sfr:" will result in the +" path being treated as relative to the source file (see sfPath +" argument). +" +" A prefix of "reg:" will treat the pathSpec as a regular +" expression substitution that is applied to the source file +" path. The format is: +" +" reg: +" +" seperator character, we often use one of [/|%#] +" is what you are looking for +" is the output pattern +" can be g for global replace or empty +" +" EXAMPLE: 'reg:/inc/src/g/' will replace every instance +" of 'inc' with 'src' in the source file path. It is possible +" to use match variables so you could do something like: +" 'reg:|src/\([^/]*\)|inc/\1||' (see 'help :substitute', +" 'help pattern' and 'help sub-replace-special' for more details +" +" NOTE: a.vim uses ',' (comma) internally so DON'T use it +" in your regular expressions or other pathSpecs unless you update +" the rest of the a.vim code to use some other seperator. +" +" Args : pathSpec -- path component (or substitution patterns) +" sfPath -- source file path +" Returns : a path that can be used by AlternateFile() +" Author : Bindu Wavell +function! ExpandAlternatePath(pathSpec, sfPath) + let prfx = strpart(a:pathSpec, 0, 4) + if (prfx == "wdr:" || prfx == "abs:") + let path = strpart(a:pathSpec, 4) + elseif (prfx == "reg:") + let re = strpart(a:pathSpec, 4) + let sep = strpart(re, 0, 1) + let patend = match(re, sep, 1) + let pat = strpart(re, 1, patend - 1) + let subend = match(re, sep, patend + 1) + let sub = strpart(re, patend+1, subend - patend - 1) + let flag = strpart(re, strlen(re) - 2) + if (flag == sep) + let flag = '' + endif + let path = substitute(a:sfPath, pat, sub, flag) + "call confirm('PAT: [' . pat . '] SUB: [' . sub . ']') + "call confirm(a:sfPath . ' => ' . path) + else + let path = a:pathSpec + if (prfx == "sfr:") + let path = strpart(path, 4) + endif + let path = a:sfPath . "/" . path + endif + return path +endfunction + +" Function : FindFileInSearchPath (PRIVATE) +" Purpose : Searches for a file in the search path list +" Args : filename -- name of the file to search for +" pathList -- the path list to search +" relPathBase -- the path which relative paths are expanded from +" Returns : An expanded filename if found, the empty string otherwise +" Author : Michael Sharpe (feline@irendi.com) +" History : inline code written by Bindu Wavell originally +function! FindFileInSearchPath(fileName, pathList, relPathBase) + let filepath = "" + let m = 1 + let pathListLen = strlen(a:pathList) + if (pathListLen > 0) + while (1) + let pathSpec = GetNthItemFromList(a:pathList, m) + if (pathSpec != "") + let path = ExpandAlternatePath(pathSpec, a:relPathBase) + let fullname = path . "/" . a:fileName + let foundMatch = BufferOrFileExists(fullname) + if (foundMatch) + let filepath = fullname + break + endif + else + break + endif + let m = m + 1 + endwhile + endif + return filepath +endfunction + +" Function : FindFileInSearchPathEx (PRIVATE) +" Purpose : Searches for a file in the search path list +" Args : filename -- name of the file to search for +" pathList -- the path list to search +" relPathBase -- the path which relative paths are expanded from +" count -- find the count'th occurence of the file on the path +" Returns : An expanded filename if found, the empty string otherwise +" Author : Michael Sharpe (feline@irendi.com) +" History : Based on FindFileInSearchPath() but with extensions +function! FindFileInSearchPathEx(fileName, pathList, relPathBase, count) + let filepath = "" + let m = 1 + let spath = "" + let pathListLen = strlen(a:pathList) + if (pathListLen > 0) + while (1) + let pathSpec = GetNthItemFromList(a:pathList, m) + if (pathSpec != "") + let path = ExpandAlternatePath(pathSpec, a:relPathBase) + if (spath != "") + let spath = spath . ',' + endif + let spath = spath . path + else + break + endif + let m = m + 1 + endwhile + endif + + if (&path != "") + if (spath != "") + let spath = spath . ',' + endif + let spath = spath . &path + endif + + let filepath = findfile(a:fileName, spath, a:count) + return filepath +endfunction + +" Function : EnumerateFilesByExtension (PRIVATE) +" Purpose : enumerates all files by a particular list of alternate extensions. +" Args : path -- path of a file (not including the file) +" baseName -- base name of the file to be expanded +" extension -- extension whose alternates are to be enumerated +" Returns : comma separated list of files with extensions +" Author : Michael Sharpe +function! EnumerateFilesByExtension(path, baseName, extension) + let enumeration = "" + let extSpec = "" + let v:errmsg = "" + silent! echo g:alternateExtensions_{a:extension} + if (v:errmsg == "") + let extSpec = g:alternateExtensions_{a:extension} + endif + if (extSpec == "") + if (has_key(g:alternateExtensionsDict, a:extension)) + let extSpec = g:alternateExtensionsDict[a:extension] + endif + endif + if (extSpec != "") + let n = 1 + let done = 0 + while (!done) + let ext = GetNthItemFromList(extSpec, n) + if (ext != "") + if (a:path != "") + let newFilename = a:path . "/" . a:baseName . "." . ext + else + let newFilename = a:baseName . "." . ext + endif + if (enumeration == "") + let enumeration = newFilename + else + let enumeration = enumeration . "," . newFilename + endif + else + let done = 1 + endif + let n = n + 1 + endwhile + endif + return enumeration +endfunction + +" Function : EnumerateFilesByExtensionInPath (PRIVATE) +" Purpose : enumerates all files by expanding the path list and the extension +" list. +" Args : baseName -- base name of the file +" extension -- extension whose alternates are to be enumerated +" pathList -- the list of paths to enumerate +" relPath -- the path of the current file for expansion of relative +" paths in the path list. +" Returns : A comma separated list of paths with extensions +" Author : Michael Sharpe +function! EnumerateFilesByExtensionInPath(baseName, extension, pathList, relPathBase) + let enumeration = "" + let filepath = "" + let m = 1 + let pathListLen = strlen(a:pathList) + if (pathListLen > 0) + while (1) + let pathSpec = GetNthItemFromList(a:pathList, m) + if (pathSpec != "") + let path = ExpandAlternatePath(pathSpec, a:relPathBase) + let pe = EnumerateFilesByExtension(path, a:baseName, a:extension) + if (enumeration == "") + let enumeration = pe + else + let enumeration = enumeration . "," . pe + endif + else + break + endif + let m = m + 1 + endwhile + endif + return enumeration +endfunction + +" Function : DetermineExtension (PRIVATE) +" Purpose : Determines the extension of a filename based on the register +" alternate extension. This allow extension which contain dots to +" be considered. E.g. foo.aspx.cs to foo.aspx where an alternate +" exists for the aspx.cs extension. Note that this will only accept +" extensions which contain less than 5 dots. This is only +" implemented in this manner for simplicity...it is doubtful that +" this will be a restriction in non-contrived situations. +" Args : The path to the file to find the extension in +" Returns : The matched extension if any +" Author : Michael Sharpe (feline@irendi.com) +" History : idea from Tom-Erik Duestad +" Notes : there is some magic occuring here. The exists() function does not +" work well when the curly brace variable has dots in it. And why +" should it, dots are not valid in variable names. But the exists +" function is wierd too. Lets say foo_c does exist. Then +" exists("foo_c.e.f") will be true...even though the variable does +" not exist. However the curly brace variables do work when the +" variable has dots in it. E.g foo_{'c'} is different from +" foo_{'c.d.e'}...and foo_{'c'} is identical to foo_c and +" foo_{'c.d.e'} is identical to foo_c.d.e right? Yes in the current +" implementation of vim. To trick vim to test for existence of such +" variables echo the curly brace variable and look for an error +" message. +function! DetermineExtension(path) + let mods = ":t" + let i = 0 + while i <= s:maxDotsInExtension + let mods = mods . ":e" + let extension = fnamemodify(a:path, mods) + if (has_key(g:alternateExtensionsDict, extension)) + return extension + endif + let v:errmsg = "" + silent! echo g:alternateExtensions_{extension} + if (v:errmsg == "") + return extension + endif + let i = i + 1 + endwhile + return "" +endfunction + +" Function : AlternateFile (PUBLIC) +" Purpose : Opens a new buffer by looking at the extension of the current +" buffer and finding the corresponding file. E.g. foo.c <--> foo.h +" Args : accepts one argument. If present it used the argument as the new +" extension. +" Returns : nothing +" Author : Michael Sharpe +" History : + When an alternate can't be found in the same directory as the +" source file, a search path will be traversed looking for the +" alternates. +" + Moved some code into a separate function, minor optimization +" + rework to favor files in memory based on complete enumeration of +" all files extensions and paths +function! AlternateFile(splitWindow, ...) + let extension = DetermineExtension(expand("%:p")) + let baseName = substitute(expand("%:t"), "\." . extension . '$', "", "") + let currentPath = expand("%:p:h") + + if (a:0 != 0) + let newFullname = currentPath . "/" . baseName . "." . a:1 + call FindOrCreateBuffer(newFullname, a:splitWindow, 0) + else + let allfiles = "" + if (extension != "") + let allfiles1 = EnumerateFilesByExtension(currentPath, baseName, extension) + let allfiles2 = EnumerateFilesByExtensionInPath(baseName, extension, g:alternateSearchPath, currentPath) + + if (allfiles1 != "") + if (allfiles2 != "") + let allfiles = allfiles1 . ',' . allfiles2 + else + let allfiles = allfiles1 + endif + else + let allfiles = allfiles2 + endif + endif + + if (allfiles != "") + let bestFile = "" + let bestScore = 0 + let score = 0 + let n = 1 + + let onefile = GetNthItemFromList(allfiles, n) + let bestFile = onefile + while (onefile != "" && score < 2) + let score = BufferOrFileExists(onefile) + if (score > bestScore) + let bestScore = score + let bestFile = onefile + endif + let n = n + 1 + let onefile = GetNthItemFromList(allfiles, n) + endwhile + + if (bestScore == 0 && g:alternateNoDefaultAlternate == 1) + echo "No existing alternate available" + else + call FindOrCreateBuffer(bestFile, a:splitWindow, 1) + let b:AlternateAllFiles = allfiles + endif + else + echo "No alternate file/buffer available" + endif + endif +endfunction + +" Function : AlternateOpenFileUnderCursor (PUBLIC) +" Purpose : Opens file under the cursor +" Args : splitWindow -- indicates how to open the file +" Returns : Nothing +" Author : Michael Sharpe (feline@irendi.com) www.irendi.com +function! AlternateOpenFileUnderCursor(splitWindow,...) + let cursorFile = (a:0 > 0) ? a:1 : expand("") + let currentPath = expand("%:p:h") + let openCount = 1 + + let fileName = FindFileInSearchPathEx(cursorFile, g:alternateSearchPath, currentPath, openCount) + if (fileName != "") + call FindOrCreateBuffer(fileName, a:splitWindow, 1) + let b:openCount = openCount + let b:cursorFile = cursorFile + let b:currentPath = currentPath + else + echo "Can't find file" + endif +endfunction + +" Function : AlternateOpenNextFile (PUBLIC) +" Purpose : Opens the next file corresponding to the search which found the +" current file +" Args : bang -- indicates what to do if the current file has not been +" saved +" Returns : nothing +" Author : Michael Sharpe (feline@irendi.com) www.irendi.com +function! AlternateOpenNextFile(bang) + let cursorFile = "" + if (exists("b:cursorFile")) + let cursorFile = b:cursorFile + endif + + let currentPath = "" + if (exists("b:currentPath")) + let currentPath = b:currentPath + endif + + let openCount = 0 + if (exists("b:openCount")) + let openCount = b:openCount + 1 + endif + + if (cursorFile != "" && currentPath != "" && openCount != 0) + let fileName = FindFileInSearchPathEx(cursorFile, g:alternateSearchPath, currentPath, openCount) + if (fileName != "") + call FindOrCreateBuffer(fileName, "n".a:bang, 0) + let b:openCount = openCount + let b:cursorFile = cursorFile + let b:currentPath = currentPath + else + let fileName = FindFileInSearchPathEx(cursorFile, g:alternateSearchPath, currentPath, 1) + if (fileName != "") + call FindOrCreateBuffer(fileName, "n".a:bang, 0) + let b:openCount = 1 + let b:cursorFile = cursorFile + let b:currentPath = currentPath + else + echo "Can't find next file" + endif + endif + endif +endfunction + +comm! -nargs=? -bang IH call AlternateOpenFileUnderCursor("n", ) +comm! -nargs=? -bang IHS call AlternateOpenFileUnderCursor("h", ) +comm! -nargs=? -bang IHV call AlternateOpenFileUnderCursor("v", ) +comm! -nargs=? -bang IHT call AlternateOpenFileUnderCursor("t", ) +comm! -nargs=? -bang IHN call AlternateOpenNextFile("") +imap ih :IHS +nmap ih :IHS +imap is :IHS:A +nmap is :IHS:A +imap ihn :IHN +nmap ihn :IHN + +"function! PrintList(theList) +" let n = 1 +" let oneFile = GetNthItemFromList(a:theList, n) +" while (oneFile != "") +" let n = n + 1 +" let oneFile = GetNthItemFromList(a:theList, n) +" endwhile +"endfunction + +" Function : NextAlternate (PUBLIC) +" Purpose : Used to cycle through any other alternate file which existed on +" the search path. +" Args : bang (IN) - used to implement the AN vs AN! functionality +" Returns : nothing +" Author : Michael Sharpe +function! NextAlternate(bang) + if (exists('b:AlternateAllFiles')) + let currentFile = expand("%") + let n = 1 + let onefile = GetNthItemFromList(b:AlternateAllFiles, n) + while (onefile != "" && !EqualFilePaths(fnamemodify(onefile,":p"), fnamemodify(currentFile,":p"))) + let n = n + 1 + let onefile = GetNthItemFromList(b:AlternateAllFiles, n) + endwhile + + if (onefile != "") + let stop = n + let n = n + 1 + let foundAlternate = 0 + let nextAlternate = "" + while (n != stop) + let nextAlternate = GetNthItemFromList(b:AlternateAllFiles, n) + if (nextAlternate == "") + let n = 1 + continue + endif + let n = n + 1 + if (EqualFilePaths(fnamemodify(nextAlternate, ":p"), fnamemodify(currentFile, ":p"))) + continue + endif + if (filereadable(nextAlternate)) + " on cygwin filereadable("foo.H") returns true if "foo.h" exists + if (has("unix") && $WINDIR != "" && fnamemodify(nextAlternate, ":p") ==? fnamemodify(currentFile, ":p")) + continue + endif + let foundAlternate = 1 + break + endif + endwhile + if (foundAlternate == 1) + let s:AlternateAllFiles = b:AlternateAllFiles + "silent! execute ":e".a:bang." " . nextAlternate + call FindOrCreateBuffer(nextAlternate, "n".a:bang, 0) + let b:AlternateAllFiles = s:AlternateAllFiles + else + echo "Only this alternate file exists" + endif + else + echo "Could not find current file in alternates list" + endif + else + echo "No other alternate files exist" + endif +endfunction + +comm! -nargs=? -bang A call AlternateFile("n", ) +comm! -nargs=? -bang AS call AlternateFile("h", ) +comm! -nargs=? -bang AV call AlternateFile("v", ) +comm! -nargs=? -bang AT call AlternateFile("t", ) +comm! -nargs=? -bang AN call NextAlternate("") + +" Function : BufferOrFileExists (PRIVATE) +" Purpose : determines if a buffer or a readable file exists +" Args : fileName (IN) - name of the file to check +" Returns : 2 if it exists in memory, 1 if it exists, 0 otherwise +" Author : Michael Sharpe +" History : Updated code to handle buffernames using just the +" filename and not the path. +function! BufferOrFileExists(fileName) + let result = 0 + + let lastBuffer = bufnr("$") + let i = 1 + while i <= lastBuffer + if EqualFilePaths(expand("#".i.":p"), a:fileName) + let result = 2 + break + endif + let i = i + 1 + endwhile + + if (!result) + let bufName = fnamemodify(a:fileName,":t") + let memBufName = bufname(bufName) + if (memBufName != "") + let memBufBasename = fnamemodify(memBufName, ":t") + if (bufName == memBufBasename) + let result = 2 + endif + endif + + if (!result) + let result = bufexists(bufName) || bufexists(a:fileName) || filereadable(a:fileName) + endif + endif + + if (!result) + let result = filereadable(a:fileName) + endif + return result +endfunction + +" Function : FindOrCreateBuffer (PRIVATE) +" Purpose : searches the buffer list (:ls) for the specified filename. If +" found, checks the window list for the buffer. If the buffer is in +" an already open window, it switches to the window. If the buffer +" was not in a window, it switches to that buffer. If the buffer did +" not exist, it creates it. +" Args : filename (IN) -- the name of the file +" doSplit (IN) -- indicates whether the window should be split +" ("v", "h", "n", "v!", "h!", "n!", "t", "t!") +" findSimilar (IN) -- indicate weather existing buffers should be +" prefered +" Returns : nothing +" Author : Michael Sharpe +" History : + bufname() was not working very well with the possibly strange +" paths that can abound with the search path so updated this +" slightly. -- Bindu +" + updated window switching code to make it more efficient -- Bindu +" Allow ! to be applied to buffer/split/editing commands for more +" vim/vi like consistency +" + implemented fix from Matt Perry +function! FindOrCreateBuffer(fileName, doSplit, findSimilar) + " Check to see if the buffer is already open before re-opening it. + let FILENAME = escape(a:fileName, ' ') + let bufNr = -1 + let lastBuffer = bufnr("$") + let i = 1 + if (a:findSimilar) + while i <= lastBuffer + if EqualFilePaths(expand("#".i.":p"), a:fileName) + let bufNr = i + break + endif + let i = i + 1 + endwhile + + if (bufNr == -1) + let bufName = bufname(a:fileName) + let bufFilename = fnamemodify(a:fileName,":t") + + if (bufName == "") + let bufName = bufname(bufFilename) + endif + + if (bufName != "") + let tail = fnamemodify(bufName, ":t") + if (tail != bufFilename) + let bufName = "" + endif + endif + if (bufName != "") + let bufNr = bufnr(bufName) + let FILENAME = bufName + endif + endif + endif + + if (g:alternateRelativeFiles == 1) + let FILENAME = fnamemodify(FILENAME, ":p:.") + endif + + let splitType = a:doSplit[0] + let bang = a:doSplit[1] + if (bufNr == -1) + " Buffer did not exist....create it + let v:errmsg="" + if (splitType == "h") + silent! execute ":split".bang." " . FILENAME + elseif (splitType == "v") + silent! execute ":vsplit".bang." " . FILENAME + elseif (splitType == "t") + silent! execute ":tab split".bang." " . FILENAME + else + silent! execute ":e".bang." " . FILENAME + endif + if (v:errmsg != "") + echo v:errmsg + endif + else + + " Find the correct tab corresponding to the existing buffer + let tabNr = -1 + " iterate tab pages + for i in range(tabpagenr('$')) + " get the list of buffers in the tab + let tabList = tabpagebuflist(i + 1) + let idx = 0 + " iterate each buffer in the list + while idx < len(tabList) + " if it matches the buffer we are looking for... + if (tabList[idx] == bufNr) + " ... save the number + let tabNr = i + 1 + break + endif + let idx = idx + 1 + endwhile + if (tabNr != -1) + break + endif + endfor + " switch the the tab containing the buffer + if (tabNr != -1) + execute "tabn ".tabNr + endif + + " Buffer was already open......check to see if it is in a window + let bufWindow = bufwinnr(bufNr) + if (bufWindow == -1) + " Buffer was not in a window so open one + let v:errmsg="" + if (splitType == "h") + silent! execute ":sbuffer".bang." " . FILENAME + elseif (splitType == "v") + silent! execute ":vert sbuffer " . FILENAME + elseif (splitType == "t") + silent! execute ":tab sbuffer " . FILENAME + else + silent! execute ":buffer".bang." " . FILENAME + endif + if (v:errmsg != "") + echo v:errmsg + endif + else + " Buffer is already in a window so switch to the window + execute bufWindow."wincmd w" + if (bufWindow != winnr()) + " something wierd happened...open the buffer + let v:errmsg="" + if (splitType == "h") + silent! execute ":split".bang." " . FILENAME + elseif (splitType == "v") + silent! execute ":vsplit".bang." " . FILENAME + elseif (splitType == "t") + silent! execute ":tab split".bang." " . FILENAME + else + silent! execute ":e".bang." " . FILENAME + endif + if (v:errmsg != "") + echo v:errmsg + endif + endif + endif + endif +endfunction + +" Function : EqualFilePaths (PRIVATE) +" Purpose : Compares two paths. Do simple string comparison anywhere but on +" Windows. On Windows take into account that file paths could differ +" in usage of separators and the fact that case does not matter. +" "c:\WINDOWS" is the same path as "c:/windows". has("win32unix") Vim +" version does not count as one having Windows path rules. +" Args : path1 (IN) -- first path +" path2 (IN) -- second path +" Returns : 1 if path1 is equal to path2, 0 otherwise. +" Author : Ilya Bobir +function! EqualFilePaths(path1, path2) + if has("win16") || has("win32") || has("win64") || has("win95") + return substitute(a:path1, "\/", "\\", "g") ==? substitute(a:path2, "\/", "\\", "g") + else + return a:path1 == a:path2 + endif +endfunction diff --git a/dotfiles/vim/.vim/plugin/cscope_maps.vim b/dotfiles/vim/.vim/plugin/cscope_maps.vim new file mode 100644 index 0000000..c577b45 --- /dev/null +++ b/dotfiles/vim/.vim/plugin/cscope_maps.vim @@ -0,0 +1,165 @@ +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" CSCOPE settings for vim +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" +" This file contains some boilerplate settings for vim's cscope interface, +" plus some keyboard mappings that I've found useful. +" +" USAGE: +" -- vim 6: Stick this file in your ~/.vim/plugin directory (or in a +" 'plugin' directory in some other directory that is in your +" 'runtimepath'. +" +" -- vim 5: Stick this file somewhere and 'source cscope.vim' it from +" your ~/.vimrc file (or cut and paste it into your .vimrc). +" +" NOTE: +" These key maps use multiple keystrokes (2 or 3 keys). If you find that vim +" keeps timing you out before you can complete them, try changing your timeout +" settings, as explained below. +" +" Happy cscoping, +" +" Jason Duell jduell@alumni.princeton.edu 2002/3/7 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + + +" This tests to see if vim was configured with the '--enable-cscope' option +" when it was compiled. If it wasn't, time to recompile vim... +if has("cscope") + + """"""""""""" Standard cscope/vim boilerplate + + " use both cscope and ctag for 'ctrl-]', ':ta', and 'vim -t' + set cscopetag + + " check cscope for definition of a symbol before checking ctags: set to 1 + " if you want the reverse search order. + set csto=0 + + " add any cscope database in current directory + if filereadable("cscope.out") + cs add cscope.out + " else add the database pointed to by environment variable + elseif $CSCOPE_DB != "" + cs add $CSCOPE_DB + endif + + " show msg when any other cscope db added + set cscopeverbose + + + """"""""""""" My cscope/vim key mappings + " + " The following maps all invoke one of the following cscope search types: + " + " 's' symbol: find all references to the token under cursor + " 'g' global: find global definition(s) of the token under cursor + " 'c' calls: find all calls to the function name under cursor + " 't' text: find all instances of the text under cursor + " 'e' egrep: egrep search for the word under cursor + " 'f' file: open the filename under cursor + " 'i' includes: find files that include the filename under cursor + " 'd' called: find functions that function under cursor calls + " + " Below are three sets of the maps: one set that just jumps to your + " search result, one that splits the existing vim window horizontally and + " diplays your search result in the new window, and one that does the same + " thing, but does a vertical split instead (vim 6 only). + " + " I've used CTRL-\ and CTRL-@ as the starting keys for these maps, as it's + " unlikely that you need their default mappings (CTRL-\'s default use is + " as part of CTRL-\ CTRL-N typemap, which basically just does the same + " thing as hitting 'escape': CTRL-@ doesn't seem to have any default use). + " If you don't like using 'CTRL-@' or CTRL-\, , you can change some or all + " of these maps to use other keys. One likely candidate is 'CTRL-_' + " (which also maps to CTRL-/, which is easier to type). By default it is + " used to switch between Hebrew and English keyboard mode. + " + " All of the maps involving the macro use '^$': this is so + " that searches over '#include " return only references to + " 'time.h', and not 'sys/time.h', etc. (by default cscope will return all + " files that contain 'time.h' as part of their name). + + + " To do the first type of search, hit 'CTRL-\', followed by one of the + " cscope search types above (s,g,c,t,e,f,i,d). The result of your cscope + " search will be displayed in the current window. You can use CTRL-T to + " go back to where you were before the search. + " + + nmap s :cs find s =expand("") + nmap g :cs find g =expand("") + nmap c :cs find c =expand("") + nmap t :cs find t =expand("") + nmap e :cs find e =expand("") + nmap f :cs find f =expand("") + nmap i :cs find i ^=expand("")$ + nmap d :cs find d =expand("") + + + " Using 'CTRL-spacebar' (intepreted as CTRL-@ by vim) then a search type + " makes the vim window split horizontally, with search result displayed in + " the new window. + " + " (Note: earlier versions of vim may not have the :scs command, but it + " can be simulated roughly via: + " nmap s :cs find s =expand("") + + nmap s :scs find s =expand("") + nmap g :scs find g =expand("") + nmap c :scs find c =expand("") + nmap t :scs find t =expand("") + nmap e :scs find e =expand("") + nmap f :scs find f =expand("") + nmap i :scs find i ^=expand("")$ + nmap d :scs find d =expand("") + + + " Hitting CTRL-space *twice* before the search type does a vertical + " split instead of a horizontal one (vim 6 and up only) + " + " (Note: you may wish to put a 'set splitright' in your .vimrc + " if you prefer the new window on the right instead of the left + + nmap s :vert scs find s =expand("") + nmap g :vert scs find g =expand("") + nmap c :vert scs find c =expand("") + nmap t :vert scs find t =expand("") + nmap e :vert scs find e =expand("") + nmap f :vert scs find f =expand("") + nmap i :vert scs find i ^=expand("")$ + nmap d :vert scs find d =expand("") + + + """"""""""""" key map timeouts + " + " By default Vim will only wait 1 second for each keystroke in a mapping. + " You may find that too short with the above typemaps. If so, you should + " either turn off mapping timeouts via 'notimeout'. + " + "set notimeout + " + " Or, you can keep timeouts, by uncommenting the timeoutlen line below, + " with your own personal favorite value (in milliseconds): + " + "set timeoutlen=4000 + " + " Either way, since mapping timeout settings by default also set the + " timeouts for multicharacter 'keys codes' (like ), you should also + " set ttimeout and ttimeoutlen: otherwise, you will experience strange + " delays as vim waits for a keystroke after you hit ESC (it will be + " waiting to see if the ESC is actually part of a key code like ). + " + "set ttimeout + " + " personally, I find a tenth of a second to work well for key code + " timeouts. If you experience problems and have a slow terminal or network + " connection, set it higher. If you don't set ttimeoutlen, the value for + " timeoutlent (default: 1000 = 1 second, which is sluggish) is used. + " + "set ttimeoutlen=100 + +endif + + diff --git a/dotfiles/vim/.vim/plugin/guicolorscheme.vim b/dotfiles/vim/.vim/plugin/guicolorscheme.vim new file mode 100644 index 0000000..a938b5f --- /dev/null +++ b/dotfiles/vim/.vim/plugin/guicolorscheme.vim @@ -0,0 +1,313 @@ +" guicolorscheme.vim: Convert GUI only color schems +" +" Maintainer: Aaron Griffin +" Last Modified: Mon Feb 26 22:52:34 UTC 2007 +" Version: 1.2 +" URL: http://www.vim.org/script.php?script_id=39 +" +" Convert a GUI-only colorscheme to support 88 and 256 color terminals +" This should also work on the GUI, so using it 100% of the time, assuming +" you always have a non 8/16 color terminal should work fine + +" conversion functions {{{ +" canibalized from desert256.vim + +function! s:greynum(x) "{{{ + if &t_Co == 88 + if a:x < 23 + return 0 + elseif a:x < 69 + return 1 + elseif a:x < 103 + return 2 + elseif a:x < 127 + return 3 + elseif a:x < 150 + return 4 + elseif a:x < 173 + return 5 + elseif a:x < 196 + return 6 + elseif a:x < 219 + return 7 + elseif a:x < 243 + return 8 + else + return 9 + endif + else + if a:x < 14 + return 0 + else + let l:n = (a:x - 8) / 10 + let l:m = (a:x - 8) % 10 + if l:m < 5 + return l:n + else + return l:n + 1 + endif + endif + endif +endfunction "}}} +function! s:greylvl(n) "{{{ + if &t_Co == 88 + if a:n == 0 + return 0 + elseif a:n == 1 + return 46 + elseif a:n == 2 + return 92 + elseif a:n == 3 + return 115 + elseif a:n == 4 + return 139 + elseif a:n == 5 + return 162 + elseif a:n == 6 + return 185 + elseif a:n == 7 + return 208 + elseif a:n == 8 + return 231 + else + return 255 + endif + else + if a:n == 0 + return 0 + else + return 8 + (a:n * 10) + endif + endif +endfunction "}}} +function! s:grey(n) "{{{ + if &t_Co == 88 + if a:n == 0 + return 16 + elseif a:n == 9 + return 79 + else + return 79 + a:n + endif + else + if a:n == 0 + return 16 + elseif a:n == 25 + return 231 + else + return 231 + a:n + endif + endif +endfunction "}}} + +function! s:rgbnum(x) "{{{ + if &t_Co == 88 + if a:x < 69 + return 0 + elseif a:x < 172 + return 1 + elseif a:x < 230 + return 2 + else + return 3 + endif + else + if a:x < 75 + return 0 + else + let l:n = (a:x - 55) / 40 + let l:m = (a:x - 55) % 40 + if l:m < 20 + return l:n + else + return l:n + 1 + endif + endif + endif +endfunction "}}} +function! s:rgblvl(n) "{{{ + if &t_Co == 88 + if a:n == 0 + return 0 + elseif a:n == 1 + return 139 + elseif a:n == 2 + return 205 + else + return 255 + endif + else + if a:n == 0 + return 0 + else + return 55 + (a:n * 40) + endif + endif +endfunction "}}} +function! s:rgb(r, g, b) "{{{ + if &t_Co == 88 + return 16 + (a:r * 16) + (a:g * 4) + a:b + else + return 16 + (a:r * 36) + (a:g * 6) + a:b + endif +endfunction "}}} + +function! s:color(r, g, b) "{{{ + " get the closest grey + let l:gx = s:greynum(a:r) + let l:gy = s:greynum(a:g) + let l:gz = s:greynum(a:b) + + " get the closest color + let l:x = s:rgbnum(a:r) + let l:y = s:rgbnum(a:g) + let l:z = s:rgbnum(a:b) + + let l:level = (a:r * a:r) + (a:g * a:g) + (a:b * a:b) + if l:gx == l:gy && l:gy == l:gz + " there are two possibilities + let l:dgr = s:greylvl(l:gx) + let l:dgg = s:greylvl(l:gy) + let l:dgb = s:greylvl(l:gz) + let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb) - l:level + + let l:dr = s:rgblvl(l:gx) + let l:dg = s:rgblvl(l:gy) + let l:db = s:rgblvl(l:gz) + let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db) - l:level + + if l:dgrey < l:drgb + " use the grey + return s:grey(l:gx) + else + " use the color + return s:rgb(l:x, l:y, l:z) + endif + else + " only one possibility + return s:rgb(l:x, l:y, l:z) + endif +endfunction "}}} +function! s:cindex(rgb) "{{{ + "convert RRGGBB to a terminal (numeric) index + let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0 + let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0 + let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0 + + return s:color(l:r, l:g, l:b) +endfunction "}}} + +function! s:HL(group, fg, bg, attr) "{{{ + "The main highlight (HL) function + exec "hi clear " . a:group + if a:fg != "" + exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . s:cindex(a:fg) + endif + if a:bg != "" + exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . s:cindex(a:bg) + endif + if a:attr != "" + exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr + endif +endfunction "}}} + +"}}} + +" Completion Helpers {{{ +function! s:Colorscheme_Complete(A,L,P) + let l:files = split(globpath(&runtimepath, "colors/" . a:A . "*"), "\n") + let l:retlist = [] + for file in l:files + let l:basename = substitute(file, ".*/", "", "") + let l:basename = substitute(l:basename, "\.vim", "", "") + call add(l:retlist, l:basename) + endfor + return l:retlist +endfunction + +function! s:GetColorschemeFile(fname) + let l:files = split(globpath(&runtimepath, "colors/" . a:fname . ".vim"), "\n") + if len(l:files) == 0 + echoerr "Colorscheme ".a:fname." not found" + return "" + else + return l:files[0] + endif +endfunction + +command! -complete=customlist,s:Colorscheme_Complete -nargs=1 GuiColorScheme :call s:GuiColorScheme("") +" }}} + +function! s:GuiColorScheme(fname) + let l:file = s:GetColorschemeFile(a:fname) + if l:file == "" + return 1 + endif + + if has("gui_running") + exec "colorscheme " . l:file + return 0 + endif + + for line in readfile(l:file) + if line =~ '\s*hi' + let l:name = "" + let l:fg = "" + let l:bg = "" + let l:attr = "" + + " get highlight name + let l:start = match(line, "hi") + let l:end = match(line, "[ \t]", l:start) + let l:start = l:end +1 + let l:end = match(line, "[ \t]", l:start) + let l:name = strpart(line, l:start, l:end - l:start) + + " strip foreground color + let l:start = match(line, "guifg=") + if l:start != -1 + let l:start = l:start + 6 "strlen(guifg=) + let l:end = match(line, "[ \t]", l:start) + if l:end == -1 + let l:fg = strpart(line, l:start) + else + let l:fg = strpart(line, l:start, l:end - l:start) + endif + if strpart(l:fg, 0, 1) == "#" + let l:fg = strpart(l:fg, 1) + endif + endif + + " strip background color + let l:start = match(line, "guibg=") + if l:start != -1 + let l:start = l:start + 6 "strlen(guibg=) + let l:end = match(line, "[ \t]", l:start) + if l:end == -1 + let l:bg = strpart(line, l:start) + else + let l:bg = strpart(line, l:start, l:end - l:start) + endif + if strpart(l:bg, 0, 1) == "#" + let l:bg = strpart(l:bg, 1) + endif + endif + + " strip attribute + let l:start = match(line, "gui=") + if l:start != -1 + let l:start = l:start + 4 "strlen(gui=) + let l:end = match(line, "[ \t]", l:start) + if l:end == -1 + let l:attr = strpart(line, l:start) + else + let l:attr = strpart(line, l:start, l:end - l:start) + endif + endif + + call s:HL(l:name, l:fg, l:bg, l:attr) + endif + endfor +endfunction + +" vim:ft=vim:fdl=0:fdm=marker:ts=4:sw=4 diff --git a/dotfiles/vim/.vim/snippets/bib.snippets b/dotfiles/vim/.vim/snippets/bib.snippets new file mode 100644 index 0000000..02598b5 --- /dev/null +++ b/dotfiles/vim/.vim/snippets/bib.snippets @@ -0,0 +1,298 @@ +# author: Heinz Hofbauer (https://bitbucket.org/moebiusstrip/vimfiles) + +## PART 1 with optional fields + +# An article from a journal or magazine. +snippet article + @article{${1:key}, + author = {${2}}, + title = {${3}}, + journal = {${4}}, + year = {${5}}, + OPTvolume = {}, + OPTnumber = {}, + OPTpages = {}, + OPTmonth = {}, + OPTnote = {}, + OPTkey = {}, + } +# A book with an explicit publisher. +snippet book + @book{${1:key}, + author = {${2}}, + editor = {${3}}, + title = {${4}}, + publisher = {${5}}, + year = {${6}}, + OPTvolume = {}, + OPTnumber = {}, + OPTseries = {}, + OPTaddress = {}, + OPTedition = {}, + OPTmonth = {}, + OPTnote = {}, + OPTkey = {}, + } +# A work that is printed and bound, but without a named publisher or sponsoring institution. +snippet booklet + @booklet{${1:key}, + title = {${2}}, + OPTauthor = {}, + OPThowpublished = {}, + OPTaddress = {}, + OPTmonth = {}, + OPTyear = {}, + OPTnote = {}, + OPTkey = {}, + } +# A part of a book, usually untitled. May be a chapter (or section or whatever) and/or a range of pages. +snippet inbook + @inbook{${1:key}, + author = {${2}}, + editor = {${3}}, + title = {${4}}, + chapter = {${5}}, + pages = {${6}}, + publisher = {${7}}, + year = {${8}}, + OPTvolume = {}, + OPTnumber = {}, + OPTseries = {}, + OPTtype = {}, + OPTaddress = {}, + OPTedition = {}, + OPTmonth = {}, + OPTnote = {}, + OPTkey = {}, + } +# A part of a book having its own title. +snippet incollection + @incollection{${1:key}, + author = {${2}}, + title = {${3}}, + booktitle = {${4}}, + publisher = {${5}}, + year = {${6}}, + OPTeditor = {}, + OPTvolume = {}, + OPTnumber = {}, + OPTseries = {}, + OPTtype = {}, + OPTchapter = {}, + OPTpages = {}, + OPTaddress = {}, + OPTedition = {}, + OPTmonth = {}, + OPTnote = {}, + OPTkey = {}, + } +# An article in a conference proceedings. +snippet inproceedings + @inproceedings{${1:key}, + author = {${2}}, + title = {${3}}, + booktitle = {${4}}, + year = {${5}}, + OPTeditor = {}, + OPTvolume = {}, + OPTnumber = {}, + OPTseries = {}, + OPTpages = {}, + OPTaddress = {}, + OPTmonth = {}, + OPTorganization = {}, + OPTpublisher = {}, + OPTnote = {}, + OPTkey = {}, + } +# Technical documentation. +snippet manual + @manual{${1:key}, + title = {${2}}, + OPTauthor = {}, + OPTorganization = {}, + OPTaddress = {}, + OPTedition = {}, + OPTmonth = {}, + OPTyear = {}, + OPTnote = {}, + OPTkey = {}, + } +# A Master's thesis. +snippet mastersthesis + @mastersthesis{${1:key}, + author = {${2}}, + title = {${3}}, + school = {${4}}, + year = {${5}}, + OPTtype = {}, + OPTaddress = {}, + OPTmonth = {}, + OPTnote = {}, + OPTkey = {}, + } +# For use when nothing else fits. +snippet misc + @misc{${1:key}, + none = {${2}}, + OPTauthor = {}, + OPTtitle = {}, + OPThowpublished = {}, + OPTmonth = {}, + OPTyear = {}, + OPTnote = {}, + OPTkey = {}, + } +# A Ph.D. thesis. +snippet phdthesis + @phdthesis{${1:key}, + author = {${2}}, + title = {${3}}, + school = {${4}}, + year = {${5}}, + OPTtype = {}, + OPTaddress = {}, + OPTmonth = {}, + OPTnote = {}, + OPTkey = {}, + } +# The proceedings of a conference. +snippet proceedings + @proceedings{${1:key}, + title = {${2}}, + year = {${3}}, + OPTeditor = {}, + OPTvolume = {}, + OPTnumber = {}, + OPTseries = {}, + OPTaddress = {}, + OPTmonth = {}, + OPTpublisher = {}, + OPTorganization = {}, + OPTnote = {}, + OPTkey = {}, + } +# A report published by a school or other institution, usually numbered within a series. +snippet techreport + @techreport{${1:key}, + author = {${2}}, + title = {${3}}, + institution = {${4}}, + year = {${5}}, + OPTtype = {}, + OPTnumber = {}, + OPTaddress = {}, + OPTmonth = {}, + OPTnote = {}, + OPTkey = {}, + } +# A document having an author and title, but not formally published. +snippet unpublished + @unpublished{${1:key}, + author = {${2}}, + title = {${3}}, + note = {${4}}, + OPTmonth = {}, + OPTyear = {}, + OPTkey = {}, + } + +## PART 2 without optional fields (cleansuffix) + +# An article from a journal or magazine. +snippet articleclean + @article{${1:key}, + author = {${2}}, + title = {${3}}, + journal = {${4}}, + year = {${5}}, + } +# A book with an explicit publisher. +snippet bookclean + @book{${1:key}, + author = {${2}}, + editor = {${3}}, + title = {${4}}, + publisher = {${5}}, + year = {${6}}, + } +# A work that is printed and bound, but without a named publisher or sponsoring institution. +snippet bookletclean + @booklet{${1:key}, + title = {${2}}, + } +# A part of a book, usually untitled. May be a chapter (or section or whatever) and/or a range of pages. +snippet inbookclean + @inbook{${1:key}, + author = {${2}}, + editor = {${3}}, + title = {${4}}, + chapter = {${5}}, + pages = {${6}}, + publisher = {${7}}, + year = {${8}}, + } +# A part of a book having its own title. +snippet incollectionclean + @incollection{${1:key}, + author = {${2}}, + title = {${3}}, + booktitle = {${4}}, + publisher = {${5}}, + year = {${6}}, + } +# An article in a conference proceedings. +snippet inproceedingsclean + @inproceedings{${1:key}, + author = {${2}}, + title = {${3}}, + booktitle = {${4}}, + year = {${5}}, + } +# Technical documentation. +snippet manualclean + @manual{${1:key}, + title = {${2}}, + } +# A Master's thesis. +snippet mastersthesisclean + @mastersthesis{${1:key}, + author = {${2}}, + title = {${3}}, + school = {${4}}, + year = {${5}}, + } +# For use when nothing else fits. +snippet miscclean + @misc{${1:key}, + none = {${2}}, + } +# A Ph.D. thesis. +snippet phdthesisclean + @phdthesis{${1:key}, + author = {${2}}, + title = {${3}}, + school = {${4}}, + year = {${5}}, + } +# The proceedings of a conference. +snippet proceedingsclean + @proceedings{${1:key}, + title = {${2}}, + year = {${3}}, + } +# A report published by a school or other institution, usually numbered within a series. +snippet techreportclean + @techreport{${1:key}, + author = {${2}}, + title = {${3}}, + institution = {${4}}, + year = {${5}}, + } +# A document having an author and title, but not formally published. +snippet unpublishedclean + @unpublished{${1:key}, + author = {${2}}, + title = {${3}}, + note = {${4}}, + } diff --git a/dotfiles/vim/.vim/snippets/mail.snippets b/dotfiles/vim/.vim/snippets/mail.snippets index 84a8908..672d1be 100644 --- a/dotfiles/vim/.vim/snippets/mail.snippets +++ b/dotfiles/vim/.vim/snippets/mail.snippets @@ -16,3 +16,7 @@ snippet sig ist snippet sig sbg -- `system('cat "$HOME/.mutt/signatures/sbg.eml"')` +# signature +snippet sig jeging + -- + `system('cat "$HOME/.mutt/signatures/jeging.eml"')` diff --git a/dotfiles/vim/.vim/snippets/tex.snippets b/dotfiles/vim/.vim/snippets/tex.snippets index 2f1f66c..4c4de3f 100644 --- a/dotfiles/vim/.vim/snippets/tex.snippets +++ b/dotfiles/vim/.vim/snippets/tex.snippets @@ -1,10 +1,15 @@ # Figure snippet fig \begin{figure}[${4:tbh}] + \centering \includegraphics{${1:figs/}} - \caption{${2}} - \label{${3:fig:}} + \caption{${2}\label{${3:fig:}}} \end{figure} +# block +snippet block + \begin{block}{${1}} + ${2} + \end{block} # Frame snippet frame \begin{frame} diff --git a/dotfiles/vim/.vim/spell/de.utf-8.add b/dotfiles/vim/.vim/spell/de.utf-8.add new file mode 100644 index 0000000..9754948 --- /dev/null +++ b/dotfiles/vim/.vim/spell/de.utf-8.add @@ -0,0 +1,94 @@ +Funktionsgraphen +Abszissenwerte +Punktesammlung +Maximalgrad +Punktemenge +Rauschens +Teilschritten +Interpolationsmodi +Interpolationspunkte +Teilintervalle +ACOPOS +verrauschtes +Polynomgrenzen +Funktionswerten +Äquidistanz +Maximalzahl +Versine +Stelldauer +Beschleunigungsprofil +Basisfunktionen +Basisfunktion +Adjazenzmatrix +Knotengrad +Kernkonzepte +PintOS +GeekOS +hrwOS +tarball +x86 +Bochs +POSIX +stdout +superblock +configurate +Bebalone +Bewertungsfunktionen +reele +Gesamtbewertungsfunktion +Bewertungsfunktion +Spielsituationen +Spielsituation +Hadamarad +Brunn +Spielposition +Zugbewertung +Startpopulation +Evolutionsläufe +Brettgewichte +Verlustsituationen +Kugelanordnung +Kugelanordnungen +Kugelhaufen +Kugelverteilung +Spielbretts +Zugbestimmung +FlexRay +Voronoi +lemmata +Borelmenge +Apollonius +CGAL +genervt +mitzuhelfen +vordergründliche +vordergründlich +Vigneron +Magisterarbeit +Voronoidiagramme +Voronoidiagrammen +alii +Aichholzer +Aurenhammer +Minkowski +Voronoi +steganography +motorcylces +PSLG +isoline +Computerwissenschaften +FWF +tetrahedrization +tetrahedrizations +Delaunay +infimum +Praxisanleiter +Demaine +O'Rourke +Agarwal +Chazelle +simplices +endmark +DNSSEC +endsyntax +supremum diff --git a/dotfiles/vim/.vim/spell/de.utf-8.add.spl b/dotfiles/vim/.vim/spell/de.utf-8.add.spl new file mode 100644 index 0000000..5eaf45b Binary files /dev/null and b/dotfiles/vim/.vim/spell/de.utf-8.add.spl differ diff --git a/dotfiles/vim/.vim/spell/en.utf-8.add b/dotfiles/vim/.vim/spell/en.utf-8.add new file mode 100644 index 0000000..98c80b0 --- /dev/null +++ b/dotfiles/vim/.vim/spell/en.utf-8.add @@ -0,0 +1,10 @@ +apices +iff +isoline +Polytope +polytope +shellings +inequation +filesystem +filesystems +syscall diff --git a/dotfiles/vim/.vim/spell/en.utf-8.add.spl b/dotfiles/vim/.vim/spell/en.utf-8.add.spl new file mode 100644 index 0000000..cf3b8b8 Binary files /dev/null and b/dotfiles/vim/.vim/spell/en.utf-8.add.spl differ diff --git a/dotfiles/vim/.vim/syntax/mkd.vim b/dotfiles/vim/.vim/syntax/mkd.vim new file mode 100644 index 0000000..c6ea381 --- /dev/null +++ b/dotfiles/vim/.vim/syntax/mkd.vim @@ -0,0 +1,129 @@ +" Vim syntax file +" Language: Markdown +" Maintainer: Ben Williams +" URL: http://plasticboy.com/markdown-vim-mode/ +" Version: 9 +" Last Change: 2009 May 18 +" Remark: Uses HTML syntax file +" Remark: I don't do anything with angle brackets (<>) because that would too easily +" easily conflict with HTML syntax +" TODO: Handle stuff contained within stuff (e.g. headings within blockquotes) + + +" Read the HTML syntax to start with +if version < 600 + so :p:h/html.vim +else + runtime! syntax/html.vim + unlet b:current_syntax +endif + +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" don't use standard HiLink, it will not work with included syntax files +if version < 508 + command! -nargs=+ HtmlHiLink hi link +else + command! -nargs=+ HtmlHiLink hi def link +endif + +syn spell toplevel +syn case ignore +syn sync linebreaks=1 + +"additions to HTML groups +syn region htmlBold start=/\\\@) +syn region mkdLinkDef matchgroup=mkdDelimiter start="^ \{,3}\zs\[" end="]:" oneline nextgroup=mkdLinkDefTarget skipwhite +syn region mkdLinkDefTarget start="<\?\zs\S" excludenl end="\ze[>[:space:]\n]" contained nextgroup=mkdLinkTitle,mkdLinkDef skipwhite skipnl oneline +syn region mkdLinkTitle matchgroup=mkdDelimiter start=+"+ end=+"+ contained +syn region mkdLinkTitle matchgroup=mkdDelimiter start=+'+ end=+'+ contained +syn region mkdLinkTitle matchgroup=mkdDelimiter start=+(+ end=+)+ contained + +"define Markdown groups +syn match mkdLineContinue ".$" contained +syn match mkdRule /^\s*\*\s\{0,1}\*\s\{0,1}\*$/ +syn match mkdRule /^\s*-\s\{0,1}-\s\{0,1}-$/ +syn match mkdRule /^\s*_\s\{0,1}_\s\{0,1}_$/ +syn match mkdRule /^\s*-\{3,}$/ +syn match mkdRule /^\s*\*\{3,5}$/ +syn match mkdListItem "^\s*[-*+]\s\+" +syn match mkdListItem "^\s*\d\+\.\s\+" +syn match mkdCode /^\s*\n\(\(\s\{4,}[^ ]\|\t\+[^\t]\).*\n\)\+/ +syn match mkdLineBreak / \+$/ +syn region mkdCode start=/\\\@/ end=/$/ contains=mkdLineBreak,mkdLineContinue,@Spell +syn region mkdCode start="]*>" end="" +syn region mkdCode start="]*>" end="" + +"HTML headings +syn region htmlH1 start="^\s*#" end="\($\|#\+\)" contains=@Spell +syn region htmlH2 start="^\s*##" end="\($\|#\+\)" contains=@Spell +syn region htmlH3 start="^\s*###" end="\($\|#\+\)" contains=@Spell +syn region htmlH4 start="^\s*####" end="\($\|#\+\)" contains=@Spell +syn region htmlH5 start="^\s*#####" end="\($\|#\+\)" contains=@Spell +syn region htmlH6 start="^\s*######" end="\($\|#\+\)" contains=@Spell +syn match htmlH1 /^.\+\n=\+$/ contains=@Spell +syn match htmlH2 /^.\+\n-\+$/ contains=@Spell + + + +" fold region for headings +syn region mkdHeaderFold + \ start="^\s*\z(#\+\)" + \ skip="^\s*\z1#\+" + \ end="^\(\s*#\)\@=" + \ fold contains=TOP + +" fold region for lists +syn region mkdListFold + \ start="^\z(\s*\)\*\z(\s*\)" + \ skip="^\z1 \z2\s*[^#]" + \ end="^\(.\)\@=" + \ fold contains=TOP + +syn sync fromstart +setlocal foldmethod=syntax + + + +"highlighting for Markdown groups +HtmlHiLink mkdString String +HtmlHiLink mkdCode String +HtmlHiLink mkdBlockquote Comment +HtmlHiLink mkdLineContinue Comment +HtmlHiLink mkdListItem Identifier +HtmlHiLink mkdRule Identifier +HtmlHiLink mkdLineBreak Todo +HtmlHiLink mkdLink htmlLink +HtmlHiLink mkdURL htmlString +HtmlHiLink mkdInlineURL htmlLink +HtmlHiLink mkdID Identifier +HtmlHiLink mkdLinkDef mkdID +HtmlHiLink mkdLinkDefTarget mkdURL +HtmlHiLink mkdLinkTitle htmlString + +HtmlHiLink mkdDelimiter Delimiter + +let b:current_syntax = "mkd" + +delcommand HtmlHiLink +" vim: ts=8 diff --git a/dotfiles/vim/.vim/syntax/snippet.vim b/dotfiles/vim/.vim/syntax/snippet.vim new file mode 100644 index 0000000..b9de8f0 --- /dev/null +++ b/dotfiles/vim/.vim/syntax/snippet.vim @@ -0,0 +1,100 @@ +"============================================================================= +" FILE: syntax/snippet.vim +" AUTHOR: Shougo Matsushita (Modified) +" Last Modified: 08 Nov 2009 +" Usage: Just source this file. +" License: MIT license {{{ +" Permission is hereby granted, free of charge, to any person obtaining +" a copy of this software and associated documentation files (the +" "Software"), to deal in the Software without restriction, including +" without limitation the rights to use, copy, modify, merge, publish, +" distribute, sublicense, and/or sell copies of the Software, and to +" permit persons to whom the Software is furnished to do so, subject to +" the following conditions: +" +" The above copyright notice and this permission notice shall be included +" in all copies or substantial portions of the Software. +" +" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +" }}} +" Version: 1.5, for Vim 7.0 +"----------------------------------------------------------------------------- +" ChangeLog: "{{{ +" 1.5: +" - Deleted rank and condition. +" +" 1.4: +" - Added condition. +" - Implemented optional placeholder. +" +" 1.3: +" - Added variable. +" +" 1.2: +" - Added alias. +" - Improved color. +" +" 1.1: +" - Added delete. +" +" 1.0: +" - Initial version. +""}}} +"----------------------------------------------------------------------------- +" TODO: "{{{ +" - Nothing. +""}}} +" Bugs"{{{ +" - +""}}} +"============================================================================= + +if version < 700 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +syn region SnippetPrevWord start=+'+ end=+'+ contained +syn region SnippetPrevWord start=+"+ end=+"+ contained +syn region SnippetEval start=+`+ end=+`+ contained +syn match SnippetWord '^\s\+.*$' contains=SnippetEval,SnippetExpand +syn match SnippetExpand '\${\d\+\%(:.\{-}\)\?\\\@= 703 set spelllang=de_at,en @@ -36,6 +35,10 @@ if version >= 703 set colorcolumn=+1 endif +set wildmode=longest,list:longest + +set tags=./tags;/ + " Pathogen runtime path manipulation "call pathogen#infect() "Using the infect method breaks ft detection filetype off @@ -61,8 +64,10 @@ colorscheme shuber-wombat highlight BadWhitespace ctermbg=red guibg=red " Make trailing whitespace be flagged as bad. au Filetype python,tex,c,cpp,cs,objc,java,vim syn match BadWhitespace /\s\+$/ containedin=ALL +au Filetype python,tex,c,cpp,cs,objc,java,vim let g:airline#extensions#whitespace#enabled = 0 +" Detect indentation, but otherwise set expandtab if exists(":DetectIndent") au BufReadPost * :DetectIndent endif @@ -71,6 +76,19 @@ endif let g:syntastic_mode_map = { 'mode' : 'active', 'active_filetypes' : [], 'passive_filetypes' : ['html'] } +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Airline +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +let g:airline_powerline_fonts = 0 +let g:airline_theme = 'wombat' + +let g:airline#extensions#tabline#enabled = 1 +let g:airline#extensions#tagbar#enabled = 0 +let g:airline#extensions#whitespace#enabled = 0 +let g:airline#extensions#branch#enabled = 0 +let g:airline#extensions#branch#use_vcscommand = 1 + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Some macros """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" @@ -86,6 +104,8 @@ endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" map NERDCommenterToggle +nmap :NERDTreeToggle +nmap :TagbarToggle nmap :q nmap :w @@ -180,7 +200,7 @@ function AddIncludeGuards() call InsertIncludeGuardsWithoutEndif() endfunction -autocmd BufNewFile *.{h,hpp} call AddIncludeGuards() +autocmd BufNewFile *.{h,hpp,hxx} call AddIncludeGuards() """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" @@ -216,6 +236,13 @@ au Filetype php set textwidth=80 "au Filetype php set cindent +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" maxima +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +au BufRead,BufNewFile *.wxm set filetype=maxima + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " LaTeX """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" @@ -242,8 +269,12 @@ function FindWordRepeatings() endfunction let g:tex_flavor = "latex" -let g:LatexBox_viewer="okular" -let g:LatexBox_latexmk_options="-pvc" +let g:LatexBox_output_type = "pdf" +let g:LatexBox_viewer = "okular" +let g:LatexBox_latexmk_async = 1 +let g:LatexBox_latexmk_preview_continuously = 1 +let g:LatexBox_show_warnings = 0 +let g:LatexBox_quickfix = 2 au Filetype tex set smartindent @@ -285,17 +316,35 @@ au Filetype xml map :call OpenIn("ipe") au Filetype gnuplot map :call OpenIn("gnuplot -persist") +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" remind +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +au BufRead,BufNewFile */.remind/* set filetype=remind + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " youcompleteme """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"let g:ycm_path_to_python_interpreter = '/usr/bin/python' +let g:ycm_global_ycm_extra_conf = '/home/shuber/.ycm_extra_conf.py' let g:ycm_min_num_of_chars_for_completion = 999 let g:ycm_key_list_select_completion = [''] +let g:ycm_collect_identifiers_from_tags_files = 1 +let g:ycm_autoclose_preview_window_after_completion = 1 +nnoremap jd :YcmCompleter GoToDefinitionElseDeclaration +"let g:ycm_server_use_vim_stdout = 1 +"let g:ycm_server_log_level = 'debug' if filereadable($HOME . "/.vimrc-local") source ~/.vimrc-local endif +" Being able to load project specific vimrc files +set exrc +set secure + diff --git a/dotfiles/vim/.vimrc-local b/dotfiles/vim/.vimrc-local index ad4a000..850e516 100644 --- a/dotfiles/vim/.vimrc-local +++ b/dotfiles/vim/.vimrc-local @@ -1,2 +1,5 @@ " Place your local settings here, i.e, the ones which are not shared among all " hosts and accounts. + +"set modeline +"let g:airline_powerline_fonts = 1 \ No newline at end of file