1
0
mirror of https://github.com/amix/vimrc synced 2025-02-28 14:12:51 +08:00
amix-vimrc-mirror/vimrcs/basic.vim
Facundo Laffont 13b6c38e2d modificaciones varias
- 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
2016-09-16 19:10:57 -03:00

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