mirror of
https://github.com/amix/vimrc
synced 2025-02-28 14:12:51 +08:00

- se agregó /inicioVim.command que es una manera de ejecutar vim con NERDTree activado - se agregó /pendiente.txt para agregar ítems sobre las modificaciones que hay que hacer - se corrigió el mapeo 'ino ñjaf <esc>': se le quitó un espacio que tenía al final, que hacía que cuando el cursor estaba en EOL hacía retorno de carro y salto de línea - se activaron los números relativos por defecto - se agregó la secuencia $b tanto en modo VISUAL como INSERT para agregar 'begin' y 'end' automáticamente - se agregó un mapeo $$ en modo INSERT para poder salir de los paréntesis cuando el cursor está sobre el paréntesis de cierre. Eso hace más cómo el uso de los mapeos que colocan los diferentes tipos de paréntesis automáticamente
436 lines
12 KiB
VimL
436 lines
12 KiB
VimL
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" 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 <leader>w :w!<cr>
|
|
|
|
" sale de todas las ventanas
|
|
map <leader>q :qa<cr>
|
|
|
|
" volver al modo normal sin tener que retirar los dedos de la posición normal en el teclado
|
|
ino ñjaf <esc>
|
|
|
|
" <¿?>
|
|
" :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 <space>f<space> i{{{<esc>o}}}<esc>O<esc>i
|
|
|
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" => 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 <silent> * :<C-u>call VisualSelection('', '')<CR>/<C-R>=@/<CR><CR>
|
|
vnoremap <silent> ¿ :<C-u>call VisualSelection('', '')<CR>?<C-R>=@/<CR><CR>
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" => sobre movimiento, pestañas, ventanas y buffers
|
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
|
|
" mapeos de búsqueda
|
|
map <space> /
|
|
" <¿>no funciona<?>
|
|
" map <C-Space> ?
|
|
|
|
" deshabilita el resaltado de las búsquedas
|
|
map <silent> <leader><cr> :noh<cr>
|
|
|
|
" movimiento entre ventanas
|
|
map <C-j> <C-W>j
|
|
map <C-k> <C-W>k
|
|
map <C-h> <C-W>h
|
|
map <C-l> <C-W>l
|
|
|
|
" movimiento entre líneas con igual indentación
|
|
map <space>+ :call search('^'. matchstr(getline('.'), '\(^\s*\)') .'\%<' . line('.') . 'l\S', 'be')<CR>
|
|
map <space>- :call search('^'. matchstr(getline('.'), '\(^\s*\)') .'\%>' . line('.') . 'l\S', 'e')<CR>
|
|
|
|
" cierra el buffer actual
|
|
map <leader>bd :Bclose<cr>:tabclose<cr>gT
|
|
|
|
" cierra todos los buffers
|
|
map <leader>ba :bufdo bd<cr>
|
|
|
|
" navegación entre buffers
|
|
map <leader>l :bnext<cr>
|
|
map <leader>h :bprevious<cr>
|
|
|
|
" navegación entre pestañas
|
|
map <leader>tn :tabnew<cr>
|
|
map <leader>to :tabonly<cr>
|
|
map <leader>tc :tabclose<cr>
|
|
map <leader>tm :tabmove
|
|
map <leader>t<leader> :tabnext
|
|
|
|
" 'tl' salta entre la pestaña actual y la última a la que se accedió
|
|
let g:lasttab = 1
|
|
nmap <Leader>tl :exe "tabn ".g:lasttab<CR>
|
|
au TabLeave * let g:lasttab = tabpagenr()
|
|
|
|
" abre una nueva pestaña con la ruta del buffer actual
|
|
map <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/<cr>
|
|
|
|
" configura el CWD para que sea el mismo que el del buffer abierto
|
|
map <leader>cd :cd %:p:h<cr>:pwd<cr>
|
|
|
|
" 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 ^
|
|
|
|
" colocación de espacios sin tener que entrar en modo INSERT
|
|
nn <space>k<space> O<esc>j
|
|
nn <space>kk O<esc>
|
|
nn <space><space>k O<esc>k
|
|
nn <space>kj O<esc>jo<esc>k
|
|
nn <space>j<space> o<esc>k
|
|
nn <space>jj o<esc>
|
|
nn <space><space>j o<esc>j
|
|
nn <space>h<space> i<space><esc>l
|
|
nn <space>hh i<space><esc>
|
|
nn <space><space>h i<space><esc>h
|
|
nn <space>hl i<space><esc>la<space><esc>h
|
|
nn <space>l<space> a<space><esc>h
|
|
nn <space>ll a<space><esc>
|
|
nn <space><space>l a<space><esc>l
|
|
|
|
" pega el contenido del registro de doble comillas arriba y debajo del texto
|
|
map <space>p<space> Pjpk
|
|
|
|
" <¡>no funciona correctamente<!>
|
|
" mueve una línea de texto hacia arriba o hacia abajo
|
|
" nmap <D-j> mz:m+<cr>`z
|
|
" nmap <D-k> mz:m-2<cr>`z
|
|
" vmap <D-j> :m'>+<cr>`<my`>mzgv`yo`z
|
|
" vmap <D-k> :m'<-2<cr>`>my`<mzgv`yo`z
|
|
|
|
" borra los espacios sobrantes al final de la línea, cuando se guarda el buffer
|
|
func! DeleteTrailingWS()
|
|
exe "normal mz"
|
|
%s/\s\+$//ge
|
|
exe "normal `z"
|
|
endfunc
|
|
autocmd BufWrite *.py :call DeleteTrailingWS()
|
|
autocmd BufWrite *.coffee :call DeleteTrailingWS()
|
|
|
|
" <¿>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 <silent> gv :call VisualSelection('gv', '')<CR>
|
|
|
|
" Open Ag and put the cursor in the right position
|
|
map <leader>g :Ag
|
|
|
|
" When you press <leader>r you can search and replace the selected text
|
|
vnoremap <silent> <leader>r :call VisualSelection('replace', '')<CR>
|
|
|
|
" 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:
|
|
" <leader>cc
|
|
"
|
|
" To go to the next search result do:
|
|
" <leader>n
|
|
"
|
|
" To go to the previous search results do:
|
|
" <leader>p
|
|
"
|
|
map <leader>cc :botright cope<cr>
|
|
map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg
|
|
map <leader>n :cn<cr>
|
|
map <leader>p :cp<cr>
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" => chequeo de gramática
|
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
|
|
" activa o desactiva el chequeo de gramática
|
|
map <leader>ss :setlocal spell!<cr>
|
|
|
|
" atajos para herramientas de la gramática
|
|
map <leader>sn ]s
|
|
map <leader>sp [s
|
|
map <leader>sa zg
|
|
map <leader>s? z=
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" => misceláneo
|
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
|
|
" quita los caracteres ^M de windows cuando las codificaciones de texto se mezclan
|
|
noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm
|
|
|
|
" activa o desactiva el modo paste
|
|
map <leader>pp :setlocal paste!<cr>
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" => 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 <SID>BufcloseCloseIt()
|
|
" no cierra la ventana cuando se borra un buffer
|
|
function! <SID>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
|