""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Mantenimiento: " Facundo Laffont " facundolaffont@gmail.com " " Secciones: " -> general " -> interfaz de usuario de Vim " -> colores y fuentes tipográficas " -> archivos, backups y deshacer " -> texto, tabulación e indentación " -> relacionado con el modo visual " -> sobre movimiento, pestañas, ventanas y buffers " -> línea de estado " -> mapeos para edición " -> vimgrep searching and cope displaying <¡>falta traducir y modificar sección " -> chequeo de gramática " -> misceláneo " -> sección de definición de funciones " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => general """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Cuántas líneas de historia debe recordar Vim set history=500 " Habilita la carga de archivos de plugins/indent según el tipo de archivo que se está utilizando filetype plugin on filetype indent on " Cuando el archivo es modificado desde afuera de Vim, se vuelve a cargar set autoread " Se va a utilizar el mapleader para generar combinaciones de tecla extra let mapleader = "," let g:mapleader = "," " guardado rápido nmap w :w! " sale de todas las ventanas map q :qa " sale de la ventana actual map q :q " volver al modo normal sin tener que retirar los dedos de la posición normal en el teclado ino ñjaf " <¿?> " :W sudo saves the file (useful for handling the permission-denied error) command W w !sudo tee % > /dev/null """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => interfaz de usuario de Vim """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " deja un espacio de 5 líneas entre el curso y el borde superior o inferior set so=5 " activa el menú Wild set wildmenu " ignora los archivos de compilación (útil para git) set wildignore=*.o,*~,*.pyc,*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store " siempre muestra la posición del cursor set ruler " altura de la línea de comandos set cmdheight=2 " activa los números relativos set rnu " " A buffer becomes hidden when it is abandoned set hid " configura backspace, los comandos h y l, y los movimientos con las flechas para que el cursor " responda como normalmente lo hace fuera de Vim, cuando se está al principio o final de la línea set backspace=eol,start,indent set whichwrap+=<,>,h,l " ignora la sensibilidad de las mayúsculas cuando se está buscando set ignorecase " realiza búsquedas inteligentes en cuanto a la sensibilidad de las mayúsculas set smartcase " resalta los resultados de las búsquedas set hlsearch " hace que la búsqueda actúe como en los navegadores web modernos set incsearch " no redibuja cuando se ejecutan macros (buena performance) set lazyredraw " activa magic para las expresiones regulares set magic " muestra el paréntesis opuesto cuando el cursor está sobre uno set showmatch " cuántas décimas de segundos tarda en parpadear el cursor cuando se indica el paréntesis opuesto set mat=2 " quita el sonido y el flash en los errores set noerrorbells set novisualbell set t_vb= set tm=500 " agrega un poco de margen a la izquierda set foldcolumn=3 " configura el plegado basado en marcas set foldmethod=marker set foldmarker={{{,}}} " agrega automáticamente las marcas de plegado desde modo NORMAL " el mapeo desde modo INSERT está en extended.vim map f i{{{o}}}Oi """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => colores y fuentes tipográficas """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " habilita el resaltado según sintaxis syntax enable " intenta utilizar el esquema de color desert try colorscheme desert catch endtry " si el color de fondo es un color oscuro, Vim utiliza colores que contrasten mejor con ese tipo de " color de fondo set background=dark " establece utf8 como la codificación estándar set encoding=utf8 " utiliza Unix como tipo de archivo estándar set ffs=unix,mac,dos """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => archivos, backups y deshacer """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Turn backup off, since most stuff is in SVN, git et.c anyway... set nobackup set nowb set noswapfile """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => texto, tabulación e indentación """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " usa espacios en vez de tabulación set expandtab " usa las tabulaciones de manera inteligente set smarttab " 1 tabulación == 4 espacios set shiftwidth=4 set tabstop=4 " el quiebre de línea se realiza a los 100 caracteres set lbr set tw=100 " establece autoindentación, indentación inteligente y quiebre de líneas set ai set si set wrap """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => relacionado con el modo visual """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " en modo Visual, presionando * o ¿, busca la selección actual vnoremap * :call VisualSelection('', '')/=@/ vnoremap ¿ :call VisualSelection('', '')?=@/ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => sobre movimiento, pestañas, ventanas y buffers """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " mapeos de búsqueda map / " <¿>no funciona " map ? " deshabilita el resaltado de las búsquedas map :noh " movimiento entre ventanas map j map k map h map l " movimiento entre líneas con igual indentación map + :call search('^'. matchstr(getline('.'), '\(^\s*\)') .'\%<' . line('.') . 'l\S', 'be') map - :call search('^'. matchstr(getline('.'), '\(^\s*\)') .'\%>' . line('.') . 'l\S', 'e') " cierra el buffer actual map bd :Bclose:tabclosegT " cierra todos los buffers map ba :bufdo bd " navegación entre buffers map l :bnext map h :bprevious " navegación entre pestañas map tn :tabnew map to :tabonly map tc :tabclose map tm :tabmove map t :tabnext " 'tl' salta entre la pestaña actual y la última a la que se accedió let g:lasttab = 1 nmap tl :exe "tabn ".g:lasttab au TabLeave * let g:lasttab = tabpagenr() " abre una nueva pestaña con la ruta del buffer actual map te :tabedit =expand("%:p:h")/ " configura el CWD para que sea el mismo que el del buffer abierto map cd :cd %:p:h:pwd " especifica el comportamiento cuando se cambia de buffer try set switchbuf=newtab set stal=2 catch endtry " al abrir un archivo, vuelve al mismo punto donde se dejó cuando se cerró au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => línea de estado """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " siempre muestra la línea de estado set laststatus=2 " formateo de la línea de estado set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => mapeos para edición """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " remapea '0' para que posicione el cursor en el primer carácter no blanco map 0 ^ " en vez de copiar toda la línea, copia desde el cursor hasta el final de la línea map Y y$ " colocación de espacios sin tener que entrar en modo INSERT nn k Oj nn kk O nn k Ok nn kj Ojok nn j ok nn jj o nn j oj nn h il nn hh i nn h ih nn hl ilah nn l ah nn ll a nn l al " pega el contenido del registro de doble comillas arriba y debajo del texto map p Pjpk " <¡>no funciona correctamente " mueve una línea de texto hacia arriba o hacia abajo " nmap mz:m+`z " nmap mz:m-2`z " vmap :m'>+`mzgv`yo`z " vmap :m'<-2`>my`falta traducir y modificar toda esta sección """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Ag searching and cope displaying " requires ag.vim - it's much better than vimgrep/grep """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " When you press gv you Ag after the selected text vnoremap gv :call VisualSelection('gv', '') " Open Ag and put the cursor in the right position map g :Ag " When you press r you can search and replace the selected text vnoremap r :call VisualSelection('replace', '') " Do :help cope if you are unsure what cope is. It's super useful! " " When you search with Ag, display your results in cope by doing: " cc " " To go to the next search result do: " n " " To go to the previous search results do: " p " map cc :botright cope map co ggVGy:tabnew:set syntax=qfpgg map n :cn map p :cp """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => chequeo de gramática """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " activa o desactiva el chequeo de gramática map ss :setlocal spell! " atajos para herramientas de la gramática map sn ]s map sp [s map sa zg map s? z= """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => misceláneo """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " quita los caracteres ^M de windows cuando las codificaciones de texto se mezclan noremap m mmHmt:%s///ge'tzt'm " activa o desactiva el modo paste map pp :setlocal paste! """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => sección de definición de funciones """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " ejecuta la acción 'str' como dentro de un menú gráfico function! CmdLine(str) " crea un menu 'Foo' con un submenú 'Bar' que ejecuta el comando str exe "menu Foo.Bar :" . a:str " ejecuta el menú Foo.Bar emenu Foo.Bar " borra el menú Foo y todo su contenido unmenu Foo endfunction function! VisualSelection(direction, extra_filter) range " definición let l:saved_reg = @" " execute "normal! vgvy" let l:pattern = escape(@", '\\/.*$^~[]') let l:pattern = substitute(l:pattern, "\n$", "", "") if a:direction == 'gv' call CmdLine("Ag \"" . l:pattern . "\" " ) elseif a:direction == 'replace' call CmdLine("%s" . '/'. l:pattern . '/') endif let @/ = l:pattern let @" = l:saved_reg endfunction " devuelve true si el modo paste está activado function! HasPaste() if &paste return 'PASTE MODE ' endif return '' endfunction " redefine el comando Bclose command! Bclose call BufcloseCloseIt() " no cierra la ventana cuando se borra un buffer function! BufcloseCloseIt() let l:currentBufNum = bufnr("%") let l:alternateBufNum = bufnr("#") if buflisted(l:alternateBufNum) buffer # else bnext endif if bufnr("%") == l:currentBufNum new endif if buflisted(l:currentBufNum) execute("bdelete! ".l:currentBufNum) endif endfunction " " Make VIM remember position in file after reopen " if has("autocmd") " au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif "endif