¿Qué hay en tu .vimrc? [cerrado]


157

Vi y Vim permiten una personalización realmente impresionante, generalmente almacenada dentro de un .vimrcarchivo. Las características típicas para un programador serían resaltado de sintaxis, sangría inteligente, etc.

¿Qué otros trucos para la programación productiva tienes escondidos en tu .vimrc?

Estoy principalmente interesado en refactorizaciones, clases automáticas y macros de productividad similares, especialmente para C #.


11
Creo que debería haber pedido a la gente que publique sus archivos de configuración vim comentados .
innaM

¿Por qué no compartir estas cosas en github? Tengo toda mi carpeta .vim bajo git y todo se puede ver aquí: github.com/lsdr/vim-folder
lsdr

1
No creo que los .vimrcs completos sean útiles; Si un grupo de personas vota por una respuesta, ¿vas a tomar todo y ponerlo en tu sistema? Los fragmentos son mucho más útiles, al igual que una lista de alias o funciones útiles es mucho mejor que los archivos rc completos (bash | z).
Xiong Chiamiov el

Respuestas:


104

Tú lo pediste :-)

"{{{Auto Commands

" Automatically cd into the directory that the file is in
autocmd BufEnter * execute "chdir ".escape(expand("%:p:h"), ' ')

" Remove any trailing whitespace that is in the file
autocmd BufRead,BufWrite * if ! &bin | silent! %s/\s\+$//ge | endif

" Restore cursor position to where it was before
augroup JumpCursorOnEdit
   au!
   autocmd BufReadPost *
            \ if expand("<afile>:p:h") !=? $TEMP |
            \   if line("'\"") > 1 && line("'\"") <= line("$") |
            \     let JumpCursorOnEdit_foo = line("'\"") |
            \     let b:doopenfold = 1 |
            \     if (foldlevel(JumpCursorOnEdit_foo) > foldlevel(JumpCursorOnEdit_foo - 1)) |
            \        let JumpCursorOnEdit_foo = JumpCursorOnEdit_foo - 1 |
            \        let b:doopenfold = 2 |
            \     endif |
            \     exe JumpCursorOnEdit_foo |
            \   endif |
            \ endif
   " Need to postpone using "zv" until after reading the modelines.
   autocmd BufWinEnter *
            \ if exists("b:doopenfold") |
            \   exe "normal zv" |
            \   if(b:doopenfold > 1) |
            \       exe  "+".1 |
            \   endif |
            \   unlet b:doopenfold |
            \ endif
augroup END

"}}}

"{{{Misc Settings

" Necesary  for lots of cool vim things
set nocompatible

" This shows what you are typing as a command.  I love this!
set showcmd

" Folding Stuffs
set foldmethod=marker

" Needed for Syntax Highlighting and stuff
filetype on
filetype plugin on
syntax enable
set grepprg=grep\ -nH\ $*

" Who doesn't like autoindent?
set autoindent

" Spaces are better than a tab character
set expandtab
set smarttab

" Who wants an 8 character tab?  Not me!
set shiftwidth=3
set softtabstop=3

" Use english for spellchecking, but don't spellcheck by default
if version >= 700
   set spl=en spell
   set nospell
endif

" Real men use gcc
"compiler gcc

" Cool tab completion stuff
set wildmenu
set wildmode=list:longest,full

" Enable mouse support in console
set mouse=a

" Got backspace?
set backspace=2

" Line Numbers PWN!
set number

" Ignoring case is a fun trick
set ignorecase

" And so is Artificial Intellegence!
set smartcase

" This is totally awesome - remap jj to escape in insert mode.  You'll never type jj anyway, so it's great!
inoremap jj <Esc>

nnoremap JJJJ <Nop>

" Incremental searching is sexy
set incsearch

" Highlight things that we find with the search
set hlsearch

" Since I use linux, I want this
let g:clipbrdDefaultReg = '+'

" When I close a tab, remove the buffer
set nohidden

" Set off the other paren
highlight MatchParen ctermbg=4
" }}}

"{{{Look and Feel

" Favorite Color Scheme
if has("gui_running")
   colorscheme inkpot
   " Remove Toolbar
   set guioptions-=T
   "Terminus is AWESOME
   set guifont=Terminus\ 9
else
   colorscheme metacosm
endif

"Status line gnarliness
set laststatus=2
set statusline=%F%m%r%h%w\ (%{&ff}){%Y}\ [%l,%v][%p%%]

" }}}

"{{{ Functions

"{{{ Open URL in browser

function! Browser ()
   let line = getline (".")
   let line = matchstr (line, "http[^   ]*")
   exec "!konqueror ".line
endfunction

"}}}

"{{{Theme Rotating
let themeindex=0
function! RotateColorTheme()
   let y = -1
   while y == -1
      let colorstring = "inkpot#ron#blue#elflord#evening#koehler#murphy#pablo#desert#torte#"
      let x = match( colorstring, "#", g:themeindex )
      let y = match( colorstring, "#", x + 1 )
      let g:themeindex = x + 1
      if y == -1
         let g:themeindex = 0
      else
         let themestring = strpart(colorstring, x + 1, y - x - 1)
         return ":colorscheme ".themestring
      endif
   endwhile
endfunction
" }}}

"{{{ Paste Toggle
let paste_mode = 0 " 0 = normal, 1 = paste

func! Paste_on_off()
   if g:paste_mode == 0
      set paste
      let g:paste_mode = 1
   else
      set nopaste
      let g:paste_mode = 0
   endif
   return
endfunc
"}}}

"{{{ Todo List Mode

function! TodoListMode()
   e ~/.todo.otl
   Calendar
   wincmd l
   set foldlevel=1
   tabnew ~/.notes.txt
   tabfirst
   " or 'norm! zMzr'
endfunction

"}}}

"}}}

"{{{ Mappings

" Open Url on this line with the browser \w
map <Leader>w :call Browser ()<CR>

" Open the Project Plugin <F2>
nnoremap <silent> <F2> :Project<CR>

" Open the Project Plugin
nnoremap <silent> <Leader>pal  :Project .vimproject<CR>

" TODO Mode
nnoremap <silent> <Leader>todo :execute TodoListMode()<CR>

" Open the TagList Plugin <F3>
nnoremap <silent> <F3> :Tlist<CR>

" Next Tab
nnoremap <silent> <C-Right> :tabnext<CR>

" Previous Tab
nnoremap <silent> <C-Left> :tabprevious<CR>

" New Tab
nnoremap <silent> <C-t> :tabnew<CR>

" Rotate Color Scheme <F8>
nnoremap <silent> <F8> :execute RotateColorTheme()<CR>

" DOS is for fools.
nnoremap <silent> <F9> :%s/$//g<CR>:%s// /g<CR>

" Paste Mode!  Dang! <F10>
nnoremap <silent> <F10> :call Paste_on_off()<CR>
set pastetoggle=<F10>

" Edit vimrc \ev
nnoremap <silent> <Leader>ev :tabnew<CR>:e ~/.vimrc<CR>

" Edit gvimrc \gv
nnoremap <silent> <Leader>gv :tabnew<CR>:e ~/.gvimrc<CR>

" Up and down are more logical with g..
nnoremap <silent> k gk
nnoremap <silent> j gj
inoremap <silent> <Up> <Esc>gka
inoremap <silent> <Down> <Esc>gja

" Good call Benjie (r for i)
nnoremap <silent> <Home> i <Esc>r
nnoremap <silent> <End> a <Esc>r

" Create Blank Newlines and stay in Normal mode
nnoremap <silent> zj o<Esc>
nnoremap <silent> zk O<Esc>

" Space will toggle folds!
nnoremap <space> za

" Search mappings: These will make it so that going to the next one in a
" search will center on the line it's found in.
map N Nzz
map n nzz

" Testing
set completeopt=longest,menuone,preview

inoremap <expr> <cr> pumvisible() ? "\<c-y>" : "\<c-g>u\<cr>"
inoremap <expr> <c-n> pumvisible() ? "\<lt>c-n>" : "\<lt>c-n>\<lt>c-r>=pumvisible() ? \"\\<lt>down>\" : \"\"\<lt>cr>"
inoremap <expr> <m-;> pumvisible() ? "\<lt>c-n>" : "\<lt>c-x>\<lt>c-o>\<lt>c-n>\<lt>c-p>\<lt>c-r>=pumvisible() ? \"\\<lt>down>\" : \"\"\<lt>cr>"

" Swap ; and :  Convenient.
nnoremap ; :
nnoremap : ;

" Fix email paragraphs
nnoremap <leader>par :%s/^>$//<CR>

"ly$O#{{{ "lpjjj_%A#}}}jjzajj

"}}}

"{{{Taglist configuration
let Tlist_Use_Right_Window = 1
let Tlist_Enable_Fold_Column = 0
let Tlist_Exit_OnlyWindow = 1
let Tlist_Use_SingleClick = 1
let Tlist_Inc_Winwidth = 0
"}}}

let g:rct_completion_use_fri = 1
"let g:Tex_DefaultTargetFormat = "pdf"
let g:Tex_ViewRule_pdf = "kpdf"

filetype plugin indent on
syntax on

78
Pero ¿por qué 3, establecer shiftwidth = 3, establecer softtabstop = 3 ... tal vez 2 o 4 pero por qué 3?
Johan

1
Solo me pregunto, pero ¿mapear jj a <Esc> no le dará un ligero retraso al presionar j en modo de inserción?
sykora

1
@sykora: sí, pero tan pronto como escriba otro carácter (que no sea j) aparecerá. Hago lo mismo, pero en cambio con jk, ya que creo que golpear jk es más rápido que golpear jj. Solo que esto me ha afectado es escribir el alfabeto, así que tal vez kj seas mejor.
David Miani

2
@Johan: porque 'tres es un número mágico'. :) En realidad, eso es solo bikeshedding, pero también prefiero tres. :)
Robert Massaioli

44
Si los hombres de verdad usan gcc, ¿por qué no? (¡el compilador gcc está comentado!)
Abdulsattar Mohammed

73

Esto no está en mi archivo .vimrc, pero ayer me enteré del ]pcomando. Esto pega el contenido de un búfer como lo phace, ¡pero ajusta automáticamente la sangría para que coincida con la línea en la que está el cursor! Esto es excelente para mover el código.


¿Quiere decir que esto es similar a: set paste, p,: set nopaste?
hyperboreean

3
Hasta donde sé, la opción: set paste no tiene ningún efecto en el comando p, solo afecta el texto escrito (o pegado a través de un terminal) en modo de inserción. Entonces no, es una característica diferente.
Greg Hewgill

1
No debería estar votando por esto, porque no responde la pregunta, pero me gusta mucho;)
gorsky

53

Utilizo lo siguiente para mantener todos los archivos temporales y de respaldo en un solo lugar:

set backup
set backupdir=~/.vim/backup
set directory=~/.vim/tmp

Guarda los directorios de trabajo desordenados en todo el lugar.

Primero deberá crear estos directorios, vim no los creará por usted.


2
Debo mencionar que tendrá que crear esos directorios usted mismo, vim no lo hará por usted.
Harley Holcombe

¿Esto maneja múltiples archivos idénticos correctamente? (por ejemplo, si está editando varias ramas diferentes del mismo código)
yungchin

No, esto sobrescribirá los archivos de respaldo antiguos con el mismo nombre. Si alguien tiene una forma de evitar esto, avíseme.
Harley Holcombe

3
Pruebe esto: au BufWritePre * let & bex = '-'. strftime ("% Y% m% d-% H% M% S"). '.vimbackup' (Esa es una línea.) Y debo mencionar esto también: vim.wikia.com/wiki/VimTip962
Zsolt Botykai

1
Esto también evita que Vim se queje al abrir archivos sincronizados con Dropbox en varias máquinas.
Cody Hess

31

Alguien (a saber, Frew) que publicó anteriormente tenía esta línea:

"Cd automáticamente en el directorio en el que se encuentra el archivo:"

autocmd BufEnter * execute "chdir ".escape(expand("%:p:h"), ' ')

Estaba haciendo algo así hasta que descubrí que lo mismo podría lograrse con una configuración integrada:

set autochdir

Creo que me ha sucedido algo similar en diferentes ocasiones. Vim tiene tantas configuraciones y opciones integradas diferentes que a veces es más rápido y más fácil de implementar que buscar en los documentos la forma integrada de hacerlo.


gran descubrimiento! Me gusta usar cosas integradas más ^ _ ^. Además, esto no falla si hay un | en el nombre del archivo.
Javed Ahamed el

2
autochdir tiene algunas molestias que nunca podría solucionar (cambiar el directorio antes de cargar un archivo dado en la línea de comando), y leí en otro lugar aquí en SO sobre lo autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ /que hace lo mismo básico pero no paraliza la línea de comando.
dash-tom-bang

Prefiero hacerlo opcional y usar este comando para ingresar al directorio del archivo actual: cd%: h
staackuser2

28

Mi última incorporación es para resaltar la línea actual.

set cul                                           # highlight current line
hi CursorLine term=none cterm=none ctermbg=3      # adjust color

2
¿Hay alguna forma de seleccionar entre más colores?
Fzs2

¿Cuál es la diferencia entre set cul y set cursorline?
putolaruan

Solo uso el "set cul" para obtener una línea debajo de mi fila actual. La configuración de la línea del cursor está jugando demasiado con el resaltado de sintaxis para mi gusto.
Claes Mogren

2
Consulte este script ( vim.org/scripts/script.php?script_id=1349 ) para obtener los colores disponibles. Es posible que deba activar el soporte de 256 colores para vim para obtener una variedad más amplia.
Brian Wigginton

1
@Claes En realidad, set culy set cursorlinehaz exactamente lo mismo.
Gerardo Marset

24

Actualización 2012 : ahora realmente recomendaría revisar vim-powerline que ha reemplazado mi antiguo script de línea de estado, aunque actualmente faltan algunas características que echo de menos.


Yo diría que las cosas de la línea de estado en mi vimrc probablemente fueron las más interesantes / útiles fuera del lote (arrancado de los autores vimrc aquí y la publicación de blog correspondiente aquí ).

Captura de pantalla:

línea de estado http://img34.imageshack.us/img34/849/statusline.png

Código:

"recalculate the trailing whitespace warning when idle, and after saving
autocmd cursorhold,bufwritepost * unlet! b:statusline_trailing_space_warning

"return '[\s]' if trailing white space is detected
"return '' otherwise
function! StatuslineTrailingSpaceWarning()
    if !exists("b:statusline_trailing_space_warning")

        if !&modifiable
            let b:statusline_trailing_space_warning = ''
            return b:statusline_trailing_space_warning
        endif

        if search('\s\+$', 'nw') != 0
            let b:statusline_trailing_space_warning = '[\s]'
        else
            let b:statusline_trailing_space_warning = ''
        endif
    endif
    return b:statusline_trailing_space_warning
endfunction


"return the syntax highlight group under the cursor ''
function! StatuslineCurrentHighlight()
    let name = synIDattr(synID(line('.'),col('.'),1),'name')
    if name == ''
        return ''
    else
        return '[' . name . ']'
    endif
endfunction

"recalculate the tab warning flag when idle and after writing
autocmd cursorhold,bufwritepost * unlet! b:statusline_tab_warning

"return '[&et]' if &et is set wrong
"return '[mixed-indenting]' if spaces and tabs are used to indent
"return an empty string if everything is fine
function! StatuslineTabWarning()
    if !exists("b:statusline_tab_warning")
        let b:statusline_tab_warning = ''

        if !&modifiable
            return b:statusline_tab_warning
        endif

        let tabs = search('^\t', 'nw') != 0

        "find spaces that arent used as alignment in the first indent column
        let spaces = search('^ \{' . &ts . ',}[^\t]', 'nw') != 0

        if tabs && spaces
            let b:statusline_tab_warning = '[mixed-indenting]'
        elseif (spaces && !&et) || (tabs && &et)
            let b:statusline_tab_warning = '[&et]'
        endif
    endif
    return b:statusline_tab_warning
endfunction

"recalculate the long line warning when idle and after saving
autocmd cursorhold,bufwritepost * unlet! b:statusline_long_line_warning

"return a warning for "long lines" where "long" is either &textwidth or 80 (if
"no &textwidth is set)
"
"return '' if no long lines
"return '[#x,my,$z] if long lines are found, were x is the number of long
"lines, y is the median length of the long lines and z is the length of the
"longest line
function! StatuslineLongLineWarning()
    if !exists("b:statusline_long_line_warning")

        if !&modifiable
            let b:statusline_long_line_warning = ''
            return b:statusline_long_line_warning
        endif

        let long_line_lens = s:LongLines()

        if len(long_line_lens) > 0
            let b:statusline_long_line_warning = "[" .
                        \ '#' . len(long_line_lens) . "," .
                        \ 'm' . s:Median(long_line_lens) . "," .
                        \ '$' . max(long_line_lens) . "]"
        else
            let b:statusline_long_line_warning = ""
        endif
    endif
    return b:statusline_long_line_warning
endfunction

"return a list containing the lengths of the long lines in this buffer
function! s:LongLines()
    let threshold = (&tw ? &tw : 80)
    let spaces = repeat(" ", &ts)

    let long_line_lens = []

    let i = 1
    while i <= line("$")
        let len = strlen(substitute(getline(i), '\t', spaces, 'g'))
        if len > threshold
            call add(long_line_lens, len)
        endif
        let i += 1
    endwhile

    return long_line_lens
endfunction

"find the median of the given array of numbers
function! s:Median(nums)
    let nums = sort(a:nums)
    let l = len(nums)

    if l % 2 == 1
        let i = (l-1) / 2
        return nums[i]
    else
        return (nums[l/2] + nums[(l/2)-1]) / 2
    endif
endfunction


"statusline setup
set statusline=%f "tail of the filename

"display a warning if fileformat isnt unix
set statusline+=%#warningmsg#
set statusline+=%{&ff!='unix'?'['.&ff.']':''}
set statusline+=%*

"display a warning if file encoding isnt utf-8
set statusline+=%#warningmsg#
set statusline+=%{(&fenc!='utf-8'&&&fenc!='')?'['.&fenc.']':''}
set statusline+=%*

set statusline+=%h "help file flag
set statusline+=%y "filetype
set statusline+=%r "read only flag
set statusline+=%m "modified flag

"display a warning if &et is wrong, or we have mixed-indenting
set statusline+=%#error#
set statusline+=%{StatuslineTabWarning()}
set statusline+=%*

set statusline+=%{StatuslineTrailingSpaceWarning()}

set statusline+=%{StatuslineLongLineWarning()}

set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

"display a warning if &paste is set
set statusline+=%#error#
set statusline+=%{&paste?'[paste]':''}
set statusline+=%*

set statusline+=%= "left/right separator

function! SlSpace()
    if exists("*GetSpaceMovement")
        return "[" . GetSpaceMovement() . "]"
    else
        return ""
    endif
endfunc
set statusline+=%{SlSpace()}

set statusline+=%{StatuslineCurrentHighlight()}\ \ "current highlight
set statusline+=%c, "cursor column
set statusline+=%l/%L "cursor line/total lines
set statusline+=\ %P "percent through file
set laststatus=2

Entre otras cosas, informa en la línea de estado de la información de archivo estándar habitual, pero también incluye cosas adicionales como advertencias para: establecer pegar, sangría mixta, espacio en blanco final, etc. Bastante útil si eres particularmente anal sobre el formato de tu código.

Además, y como se muestra en la captura de pantalla, combinarlo con Syntastic permite resaltar cualquier error de sintaxis (suponiendo que su idioma de elección tenga un verificador de sintaxis asociado incluido.


Estoy teniendo problemas con lo anterior. Falta un condicional en LongLines (). Lo cambié a "while i <umbral", sin embargo, también falta len que se llama dentro de esa condición. ¿Alguna idea sobre la len?
Ali

Está bien, encontré lo real aquí: dotfiles.org/~gregf/.vimrc
Ali

@pug Error interno del servidor allí ahora. = (¿Puedes dar una pista o pegar una porción relevante de .vimrc en alguna parte, por favor?
Anton Strogonoff

@Anton arregló la pasta que se estropeó por el formato del código. Debería estar bien ahora. También recomiendo pegarlo en un archivo plugin / statusline.vim para evitar que abarrote su .vimrc si lo va a usar.
Gavin Gilmour

@Gavin funciona excelente, gracias por la solución y por el consejo! Solía ​​tener algo como autocmd BufEnter *.py match OverLength /\%81v.\+/en .vimrc para resaltar líneas largas, pero su enfoque podría ser menos molesto. Además, el resultado de la verificación de sintaxis en la barra de estado es una cosa realmente genial.
Anton Strogonoff

19

Mi mini versión:

syntax on
set background=dark
set shiftwidth=2
set tabstop=2

if has("autocmd")
  filetype plugin indent on
endif

set showcmd             " Show (partial) command in status line.
set showmatch           " Show matching brackets.
set ignorecase          " Do case insensitive matching
set smartcase           " Do smart case matching
set incsearch           " Incremental search
set hidden              " Hide buffers when they are abandoned

La versión grande, recopilada de varios lugares:

syntax on
set background=dark
set ruler                     " show the line number on the bar
set more                      " use more prompt
set autoread                  " watch for file changes
set number                    " line numbers
set hidden
set noautowrite               " don't automagically write on :next
set lazyredraw                " don't redraw when don't have to
set showmode
set showcmd
set nocompatible              " vim, not vi
set autoindent smartindent    " auto/smart indent
set smarttab                  " tab and backspace are smart
set tabstop=2                 " 6 spaces
set shiftwidth=2
set scrolloff=5               " keep at least 5 lines above/below
set sidescrolloff=5           " keep at least 5 lines left/right
set history=200
set backspace=indent,eol,start
set linebreak
set cmdheight=2               " command line two lines high
set undolevels=1000           " 1000 undos
set updatecount=100           " switch every 100 chars
set complete=.,w,b,u,U,t,i,d  " do lots of scanning on tab completion
set ttyfast                   " we have a fast terminal
set noerrorbells              " No error bells please
set shell=bash
set fileformats=unix
set ff=unix
filetype on                   " Enable filetype detection
filetype indent on            " Enable filetype-specific indenting
filetype plugin on            " Enable filetype-specific plugins
set wildmode=longest:full
set wildmenu                  " menu has tab completion
let maplocalleader=','        " all my macros start with ,
set laststatus=2

"  searching
set incsearch                 " incremental search
set ignorecase                " search ignoring case
set hlsearch                  " highlight the search
set showmatch                 " show matching bracket
set diffopt=filler,iwhite     " ignore all whitespace and sync

"  backup
set backup
set backupdir=~/.vim_backup
set viminfo=%100,'100,/100,h,\"500,:100,n~/.viminfo
"set viminfo='100,f1

" spelling
if v:version >= 700
  " Enable spell check for text files
  autocmd BufNewFile,BufRead *.txt setlocal spell spelllang=en
endif

" mappings
" toggle list mode
nmap <LocalLeader>tl :set list!<cr>
" toggle paste mode
nmap <LocalLeader>pp :set paste!<cr>

para su información, 'smartindent' está obsoleto (cindent lo reemplaza) y no está haciendo nada cuando usa sangría de tipo de archivo, y solo estará activo cuando no sea útil
graywh

13

A veces las cosas más simples son las más valiosas. Las 2 líneas en mi .vimrc que son totalmente indispensables:

nore :
nore

Lo hice en su nore \ ;lugar ya que uso ,como mi<leader>
aehlke

3
Pero, qué hace ? :)
Henrik Bjørnskov

66
punto y coma es un comando raramente usado. dos puntos es un comando extremadamente común, que se usa para ingresar al modo de línea de comandos. La reasignación de uno a otro le permite ingresar al modo de línea de comandos sin presionar la tecla Mayús, lo que ahorra los músculos en sus dedos pequeños.
William Pursell

77
En los teclados franceses no necesita 'shift' para escribir ',', ';' y ':' ... Pero '\', '[' y ']' son un verdadero dolor.
Olivier Pons

12

Misceláneos ajustes:

  1. Apague las molestas campanas de error:

    set noerrorbells
    set visualbell
    set t_vb=
    
  2. Haga que el cursor se mueva como se esperaba con líneas ajustadas:

    inoremap <Down> <C-o>gj
    inoremap <Up> <C-o>gk
    
  3. Busque ctags"etiquetas" en el directorio del archivo, hasta encontrar uno:

    set tags=tags;/
    
  4. Mostrar archivos SCons con sintaxis Python:

    autocmd BufReadPre,BufNewFile SConstruct set filetype=python
    autocmd BufReadPre,BufNewFile SConscript set filetype=python
    

Agregar # / usr / bin / python para el archivo SConstruct, se disparará de Vim construido en el tipo de archivo de detección mágica
richq

¿Hay una mejor manera de hacer j/ kmover como se esperaba con líneas ajustadas? No quiero presionar gtodo el tiempo.
puk

8

No soy el vim'er más avanzado del mundo, pero aquí hay algunos que he recogido

function! Mosh_Tab_Or_Complete()
    if col('.')>1 && strpart( getline('.'), col('.')-2, 3 ) =~ '^\w'
        return "\<C-N>"
    else
        return "\<Tab>"
endfunction

inoremap <Tab> <C-R>=Mosh_Tab_Or_Complete()<CR>

Hace que la pestaña autocompletar determine si desea colocar una palabra allí o una pestaña real (4 espacios).

map cc :.,$s/^ *//<CR>

Elimine todos los espacios en blanco de apertura desde aquí hasta el final del archivo. Por alguna razón, esto me parece muy útil.

set nu! 
set nobackup

Muestra los números de línea y no crees esos molestos archivos de respaldo. Nunca he restaurado nada de una copia de seguridad antigua de todos modos.

imap ii <C-[>

Mientras está en inserción, presione i dos veces para ir al modo de comando. Nunca me he encontrado con una palabra o variable con 2 i seguidas, y de esta manera no tengo que dejar que mis dedos salgan de la fila de inicio o presionar varias teclas para cambiar de un lado a otro.


3
Interesante mapeo de ii ... muy interesante. Es una idea bastante genial, aunque me preocuparía que impactara severamente mi capacidad de usar un vim 'vainilla' si tuviera que hacerlo.
thomasrutter

He estado haciendo lo mismo con ;; durante mucho tiempo y no he tenido ningún problema. Cuando me vi obligado a usar vanilla vi / vim, inmediatamente recuerdo usar la estúpida tecla [esc] (¡esa fue una razón por la que odié vim durante tantos años!). Para mí, esta configuración es absolutamente esencial. Nunca usaría voluntariamente vi (m) sin él. <br> Y me gusta la idea de usar 'ii' en lugar de ';;': más intuitivo, casi como una palanca.
iconoclasta

Otra posibilidad es usar Ctrl-C para salir del modo de inserción. Casi hace lo mismo que Escape (la única diferencia que me molesta es cuando opera en las líneas de un bloque visual).
a3nm

8

Mi vimrc muy comentado, con combinaciones de teclas readline-esque (emacs):

if version >= 700

"------ Meta ------"

" clear all autocommands! (this comment must be on its own line)
autocmd!

set nocompatible                " break away from old vi compatibility
set fileformats=unix,dos,mac    " support all three newline formats
set viminfo=                    " don't use or save viminfo files

"------ Console UI & Text display ------"

set cmdheight=1                 " explicitly set the height of the command line
set showcmd                     " Show (partial) command in status line.
set number                      " yay line numbers
set ruler                       " show current position at bottom
set noerrorbells                " don't whine
set visualbell t_vb=            " and don't make faces
set lazyredraw                  " don't redraw while in macros
set scrolloff=5                 " keep at least 5 lines around the cursor
set wrap                        " soft wrap long lines
set list                        " show invisible characters
set listchars=tab:>·,trail:·    " but only show tabs and trailing whitespace
set report=0                    " report back on all changes
set shortmess=atI               " shorten messages and don't show intro
set wildmenu                    " turn on wild menu :e <Tab>
set wildmode=list:longest       " set wildmenu to list choice
if has('syntax')
    syntax on
    " Remember that rxvt-unicode has 88 colors by default; enable this only if
    " you are using the 256-color patch
    if &term == 'rxvt-unicode'
        set t_Co=256
    endif

    if &t_Co == 256
        colorscheme xoria256
    else
        colorscheme peachpuff
    endif
endif

"------ Text editing and searching behavior ------"

set nohlsearch                  " turn off highlighting for searched expressions
set incsearch                   " highlight as we search however
set matchtime=5                 " blink matching chars for .x seconds
set mouse=a                     " try to use a mouse in the console (wimp!)
set ignorecase                  " set case insensitivity
set smartcase                   " unless there's a capital letter
set completeopt=menu,longest,preview " more autocomplete <Ctrl>-P options
set nostartofline               " leave my cursor position alone!
set backspace=2                 " equiv to :set backspace=indent,eol,start
set textwidth=80                " we like 80 columns
set showmatch                   " show matching brackets
set formatoptions=tcrql         " t - autowrap to textwidth
                                " c - autowrap comments to textwidth
                                " r - autoinsert comment leader with <Enter>
                                " q - allow formatting of comments with :gq
                                " l - don't format already long lines

"------ Indents and tabs ------"

set autoindent                  " set the cursor at same indent as line above
set smartindent                 " try to be smart about indenting (C-style)
set expandtab                   " expand <Tab>s with spaces; death to tabs!
set shiftwidth=4                " spaces for each step of (auto)indent
set softtabstop=4               " set virtual tab stop (compat for 8-wide tabs)
set tabstop=8                   " for proper display of files with tabs
set shiftround                  " always round indents to multiple of shiftwidth
set copyindent                  " use existing indents for new indents
set preserveindent              " save as much indent structure as possible
filetype plugin indent on       " load filetype plugins and indent settings

"------ Key bindings ------"

" Remap broken meta-keys that send ^[
for n in range(97,122) " ASCII a-z
    let c = nr2char(n)
    exec "set <M-". c .">=\e". c
    exec "map  \e". c ." <M-". c .">"
    exec "map! \e". c ." <M-". c .">"
endfor

""" Emacs keybindings
" first move the window command because we'll be taking it over
noremap <C-x> <C-w>
" Movement left/right
noremap! <C-b> <Left>
noremap! <C-f> <Right>
" word left/right
noremap  <M-b> b
noremap! <M-b> <C-o>b
noremap  <M-f> w
noremap! <M-f> <C-o>w
" line start/end
noremap  <C-a> ^
noremap! <C-a> <Esc>I
noremap  <C-e> $
noremap! <C-e> <Esc>A
" Rubout word / line and enter insert mode
noremap  <C-w> i<C-w>
noremap  <C-u> i<C-u>
" Forward delete char / word / line and enter insert mode
noremap! <C-d> <C-o>x
noremap  <M-d> dw
noremap! <M-d> <C-o>dw
noremap  <C-k> Da
noremap! <C-k> <C-o>D
" Undo / Redo and enter normal mode
noremap  <C-_> u
noremap! <C-_> <C-o>u<Esc><Right>
noremap! <C-r> <C-o><C-r><Esc>

" Remap <C-space> to word completion
noremap! <Nul> <C-n>

" OS X paste (pretty poor implementation)
if has('mac')
    noremap  √ :r!pbpaste<CR>
    noremap! √ <Esc>√
endif

""" screen.vim REPL: http://github.com/ervandew/vimfiles
" send paragraph to parallel process
vmap <C-c><C-c> :ScreenSend<CR>
nmap <C-c><C-c> mCvip<C-c><C-c>`C
imap <C-c><C-c> <Esc><C-c><C-c><Right>
" set shell region height
let g:ScreenShellHeight = 12


"------ Filetypes ------"

" Vimscript
autocmd FileType vim setlocal expandtab shiftwidth=4 tabstop=8 softtabstop=4

" Shell
autocmd FileType sh setlocal expandtab shiftwidth=4 tabstop=8 softtabstop=4

" Lisp
autocmd Filetype lisp,scheme setlocal equalprg=~/.vim/bin/lispindent.lisp expandtab shiftwidth=2 tabstop=8 softtabstop=2

" Ruby
autocmd FileType ruby setlocal expandtab shiftwidth=2 tabstop=2 softtabstop=2

" PHP
autocmd FileType php setlocal expandtab shiftwidth=4 tabstop=4 softtabstop=4

" X?HTML & XML
autocmd FileType html,xhtml,xml setlocal expandtab shiftwidth=2 tabstop=2 softtabstop=2

" CSS
autocmd FileType css setlocal expandtab shiftwidth=4 tabstop=4 softtabstop=4

" JavaScript
" autocmd BufRead,BufNewFile *.json setfiletype javascript
autocmd FileType javascript setlocal expandtab shiftwidth=2 tabstop=2 softtabstop=2
let javascript_enable_domhtmlcss=1

"------ END VIM-500 ------"

endif " version >= 500

para su información, 'smartindent' está obsoleto (cindent lo reemplaza) y no está haciendo nada cuando usa sangría de tipo de archivo, y solo estará activo cuando no sea útil
graywh

7
syntax on
set cindent
set ts=4
set sw=4
set backspace=2
set laststatus=2
set nohlsearch
set modeline
set modelines=3
set ai
map Q gq

set vb t_vb=

set nowrap
set ss=5
set is
set scs
set ru

map <F2> <Esc>:w<CR>
map! <F2> <Esc>:w<CR>

map <F10> <Esc>:qa<CR>
map! <F10> <Esc>:qa<CR>

map <F9>  <Esc>:wqa<CR>
map! <F9>  <Esc>:wqa<CR>

inoremap <s-up> <Esc><c-w>W<Ins>
inoremap <s-down> <Esc><c-w>w<Ins>

nnoremap <s-up> <c-w>W
nnoremap <s-down> <c-w>w

" Fancy middle-line <CR>
inoremap <C-CR> <Esc>o
nnoremap <C-CR> o

" This is the way I like my quotation marks and various braces
inoremap '' ''<Left>
inoremap "" ""<Left>
inoremap () ()<Left>
inoremap <> <><Left>
inoremap {} {}<Left>
inoremap [] []<Left>
inoremap () ()<Left>

" Quickly set comma or semicolon at the end of the string
inoremap ,, <End>,
inoremap ;; <End>;
au FileType python inoremap :: <End>:


au FileType perl,python set foldlevel=0
au FileType perl,python set foldcolumn=4
au FileType perl,python set fen
au FileType perl        set fdm=syntax
au FileType python      set fdm=indent
au FileType perl,python set fdn=4
au FileType perl,python set fml=10
au FileType perl,python set fdo=block,hor,mark,percent,quickfix,search,tag,undo,search

au FileType perl,python abbr sefl self
au FileType perl abbr sjoft shift
au FileType perl abbr DUmper Dumper

function! ToggleNumberRow()
       if !exists("g:NumberRow") || 0 == g:NumberRow
               let g:NumberRow = 1
               call ReverseNumberRow()
       else
               let g:NumberRow = 0
               call NormalizeNumberRow()
       endif
endfunction


" Reverse the number row characters
function! ReverseNumberRow()
       " map each number to its shift-key character
       inoremap 1 !
       inoremap 2 @
       inoremap 3 #
       inoremap 4 $
       inoremap 5 %
       inoremap 6 ^
       inoremap 7 &
       inoremap 8 *
       inoremap 9 (
       inoremap 0 )
       inoremap - _
    inoremap 90 ()<Left>
       " and then the opposite
       inoremap ! 1
       inoremap @ 2
       inoremap # 3
       inoremap $ 4
       inoremap % 5
       inoremap ^ 6
       inoremap & 7
       inoremap * 8
       inoremap ( 9
       inoremap ) 0
       inoremap _ -
endfunction

" DO the opposite to ReverseNumberRow -- give everything back
function! NormalizeNumberRow()
       iunmap 1
       iunmap 2
       iunmap 3
       iunmap 4
       iunmap 5
       iunmap 6
       iunmap 7
       iunmap 8
       iunmap 9
       iunmap 0
       iunmap -
       "------
       iunmap !
       iunmap @
       iunmap #
       iunmap $
       iunmap %
       iunmap ^
       iunmap &
       iunmap *
       iunmap (
       iunmap )
       iunmap _
       inoremap () ()<Left>
endfunction

"call ToggleNumberRow()
nnoremap <M-n> :call ToggleNumberRow()<CR>

" Add use <CWORD> at the top of the file
function! UseWord(word)
       let spec_cases = {'Dumper': 'Data::Dumper'}
       let my_word = a:word
       if has_key(spec_cases, my_word)
               let my_word = spec_cases[my_word]
       endif

       let was_used = search("^use.*" . my_word, "bw")

       if was_used > 0
               echo "Used already"
               return 0
       endif

       let last_use = search("^use", "bW")
       if 0 == last_use
               last_use = search("^package", "bW")
               if 0 == last_use
                       last_use = 1
               endif
       endif

       let use_string = "use " . my_word . ";"
       let res = append(last_use, use_string)
       return 1
endfunction

function! UseCWord()
       let cline = line(".")
       let ccol = col(".")
       let ch = UseWord(expand("<cword>"))
       normal mu
       call cursor(cline + ch, ccol)

endfunction

function! GetWords(pattern)
       let cline = line(".")
       let ccol = col(".")
       call cursor(1,1)

       let temp_dict = {}
       let cpos = searchpos(a:pattern)
       while cpos[0] != 0
               let temp_dict[expand("<cword>")] = 1
               let cpos = searchpos(a:pattern, 'W')
       endwhile

       call cursor(cline, ccol)
       return keys(temp_dict)
endfunction

" Append the list of words, that match the pattern after cursor
function! AppendWordsLike(pattern)
       let word_list = sort(GetWords(a:pattern))
       call append(line("."), word_list)
endfunction


nnoremap <F7>  :call UseCWord()<CR>

" Useful to mark some code lines as debug statements
function! MarkDebug()
       let cline = line(".")
       let ctext = getline(cline)
       call setline(cline, ctext . "##_DEBUG_")
endfunction

" Easily remove debug statements
function! RemoveDebug()
       %g/#_DEBUG_/d
endfunction

au FileType perl,python inoremap <M-d> <Esc>:call MarkDebug()<CR><Ins>
au FileType perl,python inoremap <F6> <Esc>:call RemoveDebug()<CR><Ins>
au FileType perl,python nnoremap <F6> :call RemoveDebug()<CR>

" end Perl settings

nnoremap <silent> <F8> :TlistToggle<CR>
inoremap <silent> <F8> <Esc>:TlistToggle<CR><Esc>

function! AlwaysCD()
       if bufname("") !~ "^scp://" && bufname("") !~ "^sftp://" && bufname("") !~ "^ftp://"
               lcd %:p:h
       endif
endfunction
autocmd BufEnter * call AlwaysCD()

function! DeleteRedundantSpaces()
       let cline = line(".")
       let ccol = col(".")
       silent! %s/\s\+$//g
       call cursor(cline, ccol)
endfunction
au BufWrite * call DeleteRedundantSpaces()

set nobackup
set nowritebackup
set cul

colorscheme evening

autocmd FileType python set formatoptions=wcrq2l
autocmd FileType python set inc="^\s*from"
autocmd FileType python so /usr/share/vim/vim72/indent/python.vim

autocmd FileType c      set si
autocmd FileType mail   set noai
autocmd FileType mail   set ts=3
autocmd FileType mail   set tw=78
autocmd FileType mail   set shiftwidth=3
autocmd FileType mail   set expandtab
autocmd FileType xslt   set ts=4
autocmd FileType xslt   set shiftwidth=4
autocmd FileType txt    set ts=3
autocmd FileType txt    set tw=78
autocmd FileType txt    set expandtab

" Move cursor together with the screen
noremap <c-j> j<c-e>
noremap <c-k> k<c-y>

" Better Marks
nnoremap ' `

6

Algunas correcciones para errores tipográficos comunes me han ahorrado una cantidad sorprendente de tiempo:

:command WQ wq
:command Wq wq
:command W w
:command Q q

iab anf and
iab adn and
iab ans and
iab teh the
iab thre there

25
No me gusta esto, solo entrena errores.
Svante

Me gusta por las palabras: y, allí, pero no por salvar y dejar de fumar
Sixtyfootersdude

3
@Svante, normalmente estaría de acuerdo, excepto que también tengo esto en mi comando, tiendo a guardar a menudo o guardar / salir a menudo. A menudo, mi meñique es solo una fracción de segundo demasiado lento para levantar la tecla shift y BAM uno u otro terminan en mayúscula, ¡es molesto!
Pharaun

1
vi estaba escrito en y para el terminal ADM3A, que tenía una tecla designada para dos puntos (:), por lo que no era necesario presionar shift. Si vuelve a asignar una clave que normalmente no se usa en modo normal / visual, como la barra espaciadora, no se encontrará con este problema tanto. nnoremap <Space>: y vnomap <Space>: en.wikipedia.org/wiki/File:KB_Terminal_ADM3A.svg
aoeu

Me gusta esto para los comandos guardar / salir, pero no para las palabras. Si comete el error cuando la red de seguridad no está allí, Vim le dirá su error. Si deletrea "teh" cuando la autocorrección no está allí, no lo notarás y te verás sin educación.
Robert Martin el

5

No me di cuenta de cuántas de mis 3200 .vimrc líneas eran solo para mis necesidades peculiares y sería bastante poco inspirador enumerarlas aquí. Pero tal vez por eso Vim es tan útil ...

iab AlP ABCDEFGHIJKLMNOPQRSTUVWXYZ
iab MoN January February March April May June July August September October November December
iab MoO Jan Feb Mar Apr May Jun Jul Aug Sep Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
iab NuM 12345678901234567890123456789012345678901234567890123456789012345678901234567890 
iab RuL ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0

" Highlight every other line
map ,<Tab> :set hls<CR>/\\n.*\\n/<CR>

" This is for working across multiple xterms and/or gvims
" Transfer/read and write one block of text between vim sessions (capture whole line):
" Write
nmap ;w :. w! ~/.vimxfer<CR>
" Read
nmap ;r :r ~/.vimxfer<CR>
" Append 
nmap ;a :. w! >>~/.vimxfer<CR>

5

Mi línea 242 .vimrcno es tan interesante, pero como nadie lo mencionó, sentí que debía compartir las dos asignaciones más importantes que han mejorado mi flujo de trabajo además de las asignaciones predeterminadas:

map <C-j> :bprev<CR>
map <C-k> :bnext<CR>
set hidden " this will go along

En serio, cambiar buffers es lo que se debe hacer con mucha frecuencia. Windows, claro, pero no todo encaja tan bien en la pantalla.

Conjunto similar de mapas para la exploración rápida de errores (ver solución rápida) y resultados grep:

map <C-n> :cn<CR>
map <C-m> :cp<CR>

Simple, sin esfuerzo y eficiente.


No he cambiado mucho entre buffers, ya que Vim obtuvo soporte para pestañas. Tengo las teclas adicionales "atrás" y "adelante" en mi teclado asignadas a los comandos de navegación de la pestaña.
Don Reba

@Don Reba, ya sabes, las pestañas simplemente replican algunas de las funciones de los buffers. Por lo tanto, no hay mucha diferencia para "usar" buffers o pestañas. Los puristas dirán que las pestañas están destinadas a organizar tareas para separar regiones y nada más. Todo lo que dicen es que los tampones tienen toda la comodidad y que he dejado el uso de pestañas, reservando a algo más debe algo más alto de abstracción venir en necesidad :).
nperson325681

4

set nobackup 
set nocp
set tabstop=4
set shiftwidth=4
set et
set ignorecase

set ai
set ruler
set showcmd
set incsearch
set dir=$temp       " Make swap live in the %TEMP% directory
syn on

" Load the color scheme
colo inkpot

4

Yo uso cscope desde vim (haciendo un gran uso de los múltiples buffers). Yo uso control-K para iniciar la mayoría de los comandos (robado de ctags como recuerdo). Además, ya he generado el archivo .cscope.out.

si tiene ("cscope")

set cscopeprg=/usr/local/bin/cscope
set cscopetagorder=0
set cscopetag
set cscopepathcomp=3
set nocscopeverbose
cs add .cscope.out
set csverb

"
" cscope find
"
" 0 or s: Find this C symbol
" 1 or d: Find this definition
" 2 or g: Find functions called by this function
" 3 or c: Find functions calling this function
" 4 or t: Find assignments to
" 6 or e: Find this egrep pattern
" 7 or f: Find this file
" 8 or i: Find files #including this file
" 
map ^Ks     :cs find 0 <C-R>=expand("<cword>")<CR><CR>
map ^Kd     :cs find 1 <C-R>=expand("<cword>")<CR><CR>
map ^Kg     :cs find 2 <C-R>=expand("<cword>")<CR><CR>
map ^Kc     :cs find 3 <C-R>=expand("<cword>")<CR><CR>
map ^Kt     :cs find 4 <C-R>=expand("<cword>")<CR><CR>
map ^Ke     :cs find 6 <C-R>=expand("<cword>")<CR><CR>
map ^Kf     :cs find 7 <C-R>=expand("<cfile>")<CR><CR>
map ^Ki     :cs find 8 <C-R>=expand("%")<CR><CR>

terminara si



3

Estoy en OS X, por lo que algunos de estos pueden tener mejores valores predeterminados en otras plataformas, pero independientemente:

syntax on
set tabstop=4
set expandtab
set shiftwidth=4

1
Es posible que desee buscar softtabstopy usar eso en lugar de tabstop. Dejarlo tabstopen su valor predeterminado de 8 ayudará cuando lea archivos que otros hayan creado con pestañas.
Greg Hewgill

66
¿Qué tiene que ver OSX con las pestañas?
aehlke

3
map = }{!}fmt^M}
map + }{!}fmt -p '> '^M}
set showmatch

= es para reformatear los párrafos normales. + es para reformatear párrafos en correos electrónicos citados. showmatch es para mostrar el paréntesis / paréntesis correspondiente cuando escribo un paréntesis o paréntesis cercano.


3

Use el primer archivo de 'etiquetas' disponible en el árbol de directorios:

:set tags=tags;/

Izquierda y derecha son para cambiar buffers, no mover el cursor:

map <right> <ESC>:bn<RETURN>
map <left> <ESC>:bp<RETURN>

Deshabilite el resaltado de búsqueda con solo presionar una tecla:

map - :nohls<cr>

3
set tabstop=4 softtabstop=4 shiftwidth=4 expandtab autoindent cindent 
set encoding=utf-8 fileencoding=utf-8
set nobackup nowritebackup noswapfile autoread
set number
set hlsearch incsearch ignorecase smartcase

if has("gui_running")
    set lines=35 columns=140
    colorscheme ir_black
else
    colorscheme darkblue
endif

" bash like auto-completion
set wildmenu
set wildmode=list:longest

inoremap <C-j> <Esc>

" for lusty explorer
noremap glr \lr
noremap glf \lf
noremap glb \lb

" use ctrl-h/j/k/l to switch between splits
map <c-j> <c-w>j
map <c-k> <c-w>k
map <c-l> <c-w>l
map <c-h> <c-w>h

" Nerd tree stuff
let NERDTreeIgnore = ['\.pyc$', '\.pyo$']
noremap gn :NERDTree<Cr>

" cd to the current file's directory
noremap gc :lcd %:h<Cr>

Me gusta mucho lo que sucede en tu configuración. Múltiples conjuntos por línea if has("gui_running"), y mapas geniales. He copiado la mayoría de tu configuración en la mía. ¡GRACIAS!
Justin Force

3

Pon esto en tu vimrc:

imap <C-l> <Space>=><Space>

y nunca pienses en escribir un hashrocket de nuevo. Sí, sé que no es necesario en Ruby 1.9. Pero no importa eso.

Mi vimrc completo está aquí .


Esta es una gran idea, pero yo sugeriría que solamente el mapeo de los archivos de rubí:autocmd FileType ruby imap <C-l> <Space>=><Space>
csexton

¿Podría explicar qué hace eso para una persona de Emacs que no conoce a Ruby?
Thomas

Esto agrega una tecla de acceso rápido Control-L al modo de inserción de Vim para escribir automáticamente un hashrocket con espacios (=>). El hashrocket es el operador clave-valor de Ruby para los hashes.
dpogg1

2

Bueno, tendrás que buscar mis configuraciones tú mismo. Que te diviertas. Principalmente es solo mi configuración deseada, incluidas las asignaciones y las cosas aleatorias relevantes para la sintaxis, así como la configuración plegable y alguna configuración de complemento, un analizador de compilación de texto, etc.

Por cierto, algo que encontré extremadamente útil es "resaltar palabra debajo del cursor":

 highlight flicker cterm=bold ctermfg=white
 au CursorMoved <buffer> exe 'match flicker /\V\<'.escape(expand('<cword>'), '/').'\>/'

Tenga en cuenta que solo ctermy termfgse usan, porque yo no uso gvim. Si desea que eso funcione, gvimsimplemente reemplácelos con guiy guifg, respectivamente.


¿Cómo hacer que funcione con múltiples ventanas abiertas? Parece funcionar solo con el búfer principal, lanzado como primero.
ohnoes

2

Intenté mantener mi .vimrc lo más útil posible en general.

Un truco útil es un controlador para archivos .gpg para editarlos de forma segura:

au BufNewFile,BufReadPre *.gpg :set secure vimi= noswap noback nowriteback hist=0 binary
au BufReadPost *.gpg :%!gpg -d 2>/dev/null
au BufWritePre *.gpg :%!gpg -e -r 'name@email.com' 2>/dev/null
au BufWritePost *.gpg u

2

1) Me gusta una línea de estado (con el nombre del archivo, el valor ascii (decimal), el valor hexadecimal y las líneas estándar, cols y%):

set statusline=%t%h%m%r%=[%b\ 0x%02B]\ \ \ %l,%c%V\ %P
" Always show a status line
set laststatus=2
"make the command line 1 line high
set cmdheight=1

2) También me gustan las asignaciones para ventanas divididas.

" <space> switches to the next window (give it a second)
" <space>n switches to the next window
" <space><space> switches to the next window and maximizes it
" <space>= Equalizes the size of all windows
" + Increases the size of the current window
" - Decreases the size of the current window

 :map <space> <c-W>w
:map <space>n <c-W>w
:map <space><space> <c-W>w<c-W>_
:map <space>= <c-W>=
if bufwinnr(1)
  map + <c-W>+
  map - <c-W>-
endif

2

En realidad, no hay mucho en mi .vimrc (incluso si tiene 850 líneas). Principalmente configuraciones y algunas asignaciones comunes y simples que era demasiado vago para extraer en complementos.

Si te refieres a "archivos de plantilla" por "clases automáticas", estoy usando un complemento expansor de plantilla ; en este mismo sitio, encontrarás los ftplugins que he definido para la edición en C y C ++, algunos pueden estar adaptados a C # supongo.

Con respecto al aspecto de refactorización, hay un consejo dedicado a este tema en http://vim.wikia.com ; IIRC el código de ejemplo es para C #. Me inspiró un plugin de refactorización que todavía necesita mucho trabajo (necesita ser refactorizado en realidad).

Debe echar un vistazo a los archivos de la lista de correo de vim, especialmente los temas sobre el uso de vim como un IDE efectivo. No olvides echar un vistazo a: marca, etiquetas, ...

HTH


2

Mi .vimrc incluye (entre otras cosas más útiles) la siguiente línea:

set statusline=%2*%n\|%<%*%-.40F%2*\|\ %2*%M\ %3*%=%1*\ %1*%2.6l%2*x%1*%1.9(%c%V%)%2*[%1*%P%2*]%1*%2B

Me aburrí mientras aprendía para mis finales de secundaria.


¿puedes explicar qué hace esto?
Vijay Dev

Muestra una línea de estado con número de búfer, nombre de archivo, estado de modificación, posición dentro del búfer y un código hexadecimal del carácter debajo del cursor. Muy bien formateado y coloreado.
Tadeusz A. Kadłubowski

1

Aquí está mi .vimrc. Yo uso Gvim 7.2

set guioptions=em
set showtabline=2
set softtabstop=2
set shiftwidth=2
set tabstop=2

" Use spaces instead of tabs
set expandtab
set autoindent

" Colors and fonts
colorscheme inkpot
set guifont=Consolas:h11:cANSI

"TAB navigation like firefox
:nmap <C-S-tab> :tabprevious<cr>
:nmap <C-tab> :tabnext<cr>
:imap <C-S-tab> <ESC>:tabprevious<cr>i
:imap <C-tab> <ESC>:tabnext<cr>i
:nmap <C-t> :tabnew<cr>
:imap <C-t> <ESC>:tabnew<cr>i
:map <C-w> :tabclose<cr>

" No Backups and line numbers
set nobackup
set number
set nuw=6

" swp files are saved to %Temp% folder
set dir=$temp
" sets the default size of gvim on open
set lines=40 columns=90

1

¿Qué hay en mi .vimrc?

ngn@macavity:~$ cat .vimrc
" This file intentionally left blank

Los archivos de configuración reales se encuentran debajo ~/.vim/ :)

Y la mayoría de las cosas allí están parasitando los esfuerzos de otras personas, adaptadas descaradamente vim.orga mi ventaja de edición.


2
Casi tengo esto, pero .vimrc necesita contener "set nocompatible" si usas esas funciones, ¿no? ¡Al menos eliminarlo causa una carga de errores aquí!
richq
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.