Que contient votre .vimrc? [fermé]

157

Vi et Vim permettent une personnalisation vraiment impressionnante, généralement stockée dans un .vimrcfichier. Les fonctionnalités typiques pour un programmeur seraient la coloration syntaxique, l'indentation intelligente, etc.

Quelles autres astuces pour la programmation productive avez-vous, cachées dans votre .vimrc?

Je suis principalement intéressé par les refactorisations, les classes automatiques et les macros de productivité similaires, en particulier pour C #.

Quelqu'un
la source
11
Je pense que vous auriez dû demander aux gens de publier leurs fichiers de configuration vim commentés .
innaM
Pourquoi ne pas partager ces choses sur github? J'ai tout mon dossier .vim sous git et tout peut être vu ici: github.com/lsdr/vim-folder
lsdr
1
Je ne pense pas que des .vimrcs entiers soient utiles; si un groupe de personnes votent pour une réponse, allez-vous simplement prendre le tout et le gifler dans votre système? Les extraits de code sont beaucoup plus utiles, tout comme une liste d'alias ou de fonctions utiles est bien meilleure que des fichiers rc entiers. (Bash | z).
Xiong Chiamiov

Réponses:

104

Vous l'avez demandé :-)

"{{{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
Frew
la source
78
Mais pourquoi 3, définir shiftwidth = 3, définir softtabstop = 3 ... peut-être 2 ou 4 mais pourquoi 3?
Johan
1
Je me demande juste, mais le mappage de jj à <Esc> ne vous donnera-t-il pas un léger décalage lorsque vous appuyez sur j en mode insertion?
sykora
1
@sykora: oui, mais dès que vous tapez un autre caractère (ce n'est pas j) il apparaîtra. Je fais la même chose, mais à la place avec jk, car je pense que frapper jk est plus rapide que frapper jj. Seules les fois où cela m'a affecté, c'est de taper l'alphabet, alors peut-être que vous serez mieux.
David Miani
2
@Johan: parce que «trois est un nombre magique». :) En fait, ce n'est que du vélo, mais je préfère trois aussi. :)
Robert Massaioli
4
Si de vrais hommes utilisent gcc, pourquoi pas vous? (le compilateur gcc est commenté!)
Abdulsattar Mohammed
73

Ce n'est pas dans mon fichier .vimrc, mais hier j'ai appris la ]pcommande. Cela colle le contenu d'un tampon comme le pfait, mais il ajuste automatiquement le retrait pour correspondre à la ligne sur laquelle se trouve le curseur! C'est excellent pour déplacer du code.

Greg Hewgill
la source
Vous voulez dire que c'est similaire à: set paste, p,: set nopaste?
hyperboreean
3
Pour autant que je sache, l'option: set paste n'a aucun effet sur la commande p, elle n'affecte que le texte tapé (ou collé via un terminal) en mode insertion. Donc non, c'est une fonctionnalité différente.
Greg Hewgill
1
Je ne devrais pas voter pour cela, car cela ne répond pas à la question, mais je l'aime beaucoup;)
gorsky
53

J'utilise ce qui suit pour conserver tous les fichiers temporaires et de sauvegarde au même endroit:

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

Enregistre les répertoires de travail encombrants partout.

Vous devrez d'abord créer ces répertoires, vim ne les créera pas pour vous.

Harley Holcombe
la source
2
Je devrais mentionner que vous devrez créer ces répertoires vous-même, vim ne le fera pas pour vous.
Harley Holcombe
Cela gère-t-il correctement plusieurs fichiers identiques? (par exemple si vous éditez plusieurs branches différentes du même code)
yungchin
Non, cela écrasera les anciens fichiers de sauvegarde portant le même nom. Si quelqu'un a un moyen de contourner cela, faites-le moi savoir.
Harley Holcombe
3
Essayez ceci: au BufWritePre * let & bex = '-'. strftime ("% Y% m% d-% H% M% S"). '.vimbackup' (C'est une ligne.) Et je dois mentionner ceci aussi: vim.wikia.com/wiki/VimTip962
Zsolt Botykai
1
Cela empêche également Vim de se plaindre lors de l'ouverture de fichiers synchronisés Dropbox sur plusieurs machines.
Cody Hess
31

Quelqu'un (à savoir Frew) qui a posté ci-dessus avait cette ligne:

"CD automatiquement dans le répertoire dans lequel se trouve le fichier:"

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

Je faisais quelque chose comme ça moi-même jusqu'à ce que je découvre que la même chose pouvait être accomplie avec un paramètre intégré:

set autochdir

Je pense que quelque chose de similaire m'est arrivé à plusieurs reprises. Vim a tellement de paramètres et d'options intégrés différents qu'il est parfois plus rapide et plus facile de le personnaliser que de rechercher dans les documents la manière intégrée de le faire.

Herbert Sitz
la source
super trouvaille! j'aime utiliser des trucs intégrés plus ^ _ ^. de plus, cela n'échoue pas s'il y a un | dans le nom du fichier.
Javed Ahamed
2
autochdir a quelques désagréments que je ne pourrais jamais contourner (changer de répertoire avant de charger un fichier donné sur la ligne de commande), et j'ai lu ailleurs ici sur SO à propos de autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ /qui fait la même chose de base mais ne paralyse pas la ligne de commande.
dash-tom-bang
Je préfère le rendre facultatif et utiliser cette commande pour entrer dans le répertoire du fichier actuel: cd%: h
staackuser2
28

Mon dernier ajout est pour la mise en évidence de la ligne actuelle

set cul                                           # highlight current line
hi CursorLine term=none cterm=none ctermbg=3      # adjust color
Martin
la source
2
existe-t-il un moyen de choisir parmi plus de couleurs?
Fzs2
Quelle est la différence entre set cul et set cursorline?
putolaruan
J'utilise juste le "set cul" pour obtenir une ligne sous ma ligne actuelle. Le paramètre de ligne de curseur dérange trop la coloration syntaxique à mon goût.
Claes Mogren
2
Reportez-vous à ce script ( vim.org/scripts/script.php?script_id=1349 ) pour obtenir les couleurs disponibles. Il peut être nécessaire d'activer la prise en charge de 256 couleurs pour vim pour obtenir une plus grande variété.
Brian Wigginton
1
@Claes En fait, set culet set cursorlinefaites exactement la même chose.
Gerardo Marset
24

Mise à jour 2012 : Je recommande maintenant vraiment de vérifier vim-powerline qui a remplacé mon ancien script statusline, bien qu'il manque actuellement quelques fonctionnalités qui me manquent.


Je dirais que le contenu de la ligne de statut dans mon vimrc était probablement le plus intéressant / utile du lot (extrait des auteurs vimrc ici et article de blog correspondant ici ).

Capture d'écran:

ligne d'état http://img34.imageshack.us/img34/849/statusline.png

Code:

"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 autres choses, il informe sur la ligne d'état des informations de fichier standard habituelles, mais inclut également des choses supplémentaires comme des avertissements pour: coller, mettre en retrait, mettre en retrait, un espace blanc de fin, etc.

De plus et comme indiqué dans la capture d'écran, le combiner avec syntastic permet de mettre en évidence toutes les erreurs de syntaxe (en supposant que la langue de votre choix dispose d'un vérificateur de syntaxe associé.

Gavin Gilmour
la source
J'ai des problèmes avec ce qui précède. Il y a un conditionnel manquant dans LongLines (). Je l'ai changé en "while i <threshold", mais il manque également len ​​qui est appelé dans cette condition. Des idées sur le len?
Ali le
C'est bon, j'ai trouvé la vraie chose ici: dotfiles.org/~gregf/.vimrc
Ali
@pug Erreur de serveur interne là-bas maintenant. = (Pouvez-vous donner un indice ou coller une partie pertinente de .vimrc quelque part, s'il vous plaît?
Anton Strogonoff
@Anton a corrigé la pâte qui avait été gâchée par le formatage du code. Ça devrait être bon maintenant. Je vous recommande également de le coller dans un fichier plugin / statusline.vim pour l'empêcher d'encombrer votre .vimrc si vous comptez l'utiliser.
Gavin Gilmour
@Gavin fonctionne excellent, merci pour le correctif et pour le conseil! J'avais l'habitude d'avoir quelque chose comme autocmd BufEnter *.py match OverLength /\%81v.\+/dans .vimrc pour mettre en évidence les longues lignes, mais votre approche pourrait être moins distrayante. De plus, le résultat de la vérification de la syntaxe dans la barre d'état est une chose vraiment cool!
Anton Strogonoff
19

Ma version mini:

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 grande version, collectée à différents endroits:

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>
Adam Gibbins
la source
Pour info, 'smartindent' est obsolète (cindent le remplace) et ne fait rien lorsque vous utilisez l'indentation du type de fichier, et ne sera actif que lorsque ce n'est pas utile
graywh
13

Parfois, les choses les plus simples sont les plus précieuses. Les 2 lignes de mon .vimrc qui sont totalement indispensables:

nore; :
nore,;
William Pursell
la source
J'ai fait à la nore \ ;place depuis que j'utilise ,comme mon<leader>
aehlke
3
Mais que fait-il? :)
Henrik Bjørnskov
6
le point-virgule est une commande rarement utilisée. deux points est une commande extrêmement courante, utilisée pour entrer en mode ligne de commande. Remapper l'un à l'autre vous permet d'entrer en mode ligne de commande sans appuyer sur la touche Maj, économisant ainsi les muscles de vos petits doigts.
William Pursell
7
Sur les claviers français, vous n'avez pas besoin de "shift" pour écrire ",", ";" et ':' ... Mais '\', '[' et ']' sont une vraie douleur.
Olivier Pons
12

Divers paramètres:

  1. Désactivez les sonneries d'erreur ennuyeuses:

    set noerrorbells
    set visualbell
    set t_vb=
    
  2. Faites bouger le curseur comme prévu avec des lignes enveloppées:

    inoremap <Down> <C-o>gj
    inoremap <Up> <C-o>gk
    
  3. Chercher ctags fichier "tags" dans le répertoire, jusqu'à ce qu'il en trouve un:

    set tags=tags;/
    
  4. Affichez les fichiers SCons avec la syntaxe Python:

    autocmd BufReadPre,BufNewFile SConstruct set filetype=python
    autocmd BufReadPre,BufNewFile SConscript set filetype=python
    
Alex B
la source
Ajoutez #! / Usr / bin / python au fichier SConstruct, cela déclenchera la magie de détection de type de fichier intégrée à Vim
richq
Existe-t-il une meilleure façon de faire j/ kdéplacer comme prévu avec des lignes enveloppées? Je ne veux pas presser à gchaque fois.
puk le
8

Je ne suis pas le vim'er le plus avancé au monde, mais en voici quelques-uns que j'ai pris

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>

Permet à la saisie semi-automatique de tabulation de déterminer si vous souhaitez y placer un mot ou une tabulation réelle (4 espaces).

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

Supprimez tous les espaces blancs d'ouverture d'ici à la fin du fichier. Pour une raison quelconque, je trouve cela très utile.

set nu! 
set nobackup

Affichez les numéros de ligne et ne créez pas ces fichiers de sauvegarde ennuyeux. De toute façon, je n'ai jamais rien restauré à partir d'une ancienne sauvegarde.

imap ii <C-[>

Pendant l'insertion, appuyez deux fois sur i pour passer en mode commande. Je n'ai jamais rencontré un mot ou une variable avec 2 i d'affilée, et de cette façon, je n'ai pas besoin que mes doigts quittent la ligne d'accueil ou d'appuyer sur plusieurs touches pour basculer entre les deux.

Whaledawg
la source
3
Cartographie intéressante de ii ... très intéressante. C'est une idée plutôt cool - même si je crains que cela n'affecte gravement ma capacité à utiliser un vim `` vanille '' si je devais le faire.
thomasrutter
J'ai fait la même chose avec ;; depuis longtemps, et n’a rencontré aucun problème. Quand je suis obligé d'utiliser vanilla vi / vim, je me souviens immédiatement d'utiliser la stupide touche [esc] (c'est l'une des raisons pour lesquelles j'ai détesté vim pendant tant d'années!). Pour moi, ce réglage est absolument essentiel. Je n'utiliserais jamais volontairement vi (m) sans lui. <br> Et j'aime l'idée d'utiliser «ii» au lieu de «;;»: plus intuitif, presque comme une bascule.
iconoclaste
Une autre possibilité est d'utiliser Ctrl-C pour quitter le mode insertion. Il fait presque la même chose que Escape (la seule différence qui me dérange est lorsque l'on opère sur les lignes d'un bloc visuel).
a3nm
8

Mon vimrc fortement commenté, avec les raccourcis clavier 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
2 tours
la source
Pour info, 'smartindent' est obsolète (cindent le remplace) et ne fait rien lorsque vous utilisez l'indentation du type de fichier, et ne sera actif que lorsque ce n'est pas utile
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 ' `
Maxim Sloyko
la source
6

Certaines corrections de fautes de frappe courantes m'ont fait gagner un temps surprenant:

: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
Dominic Dos Santos
la source
25
Je n'aime pas ça - ça entraîne juste des erreurs.
Svante
Je l'aime pour les mots: et, le, là mais pas pour sauver et quitter
soixantefootersdude
3
@Svante, normalement je serais d'accord, sauf que je l'ai également dans ma commande, j'ai tendance à enregistrer souvent ou à enregistrer / quitter souvent. Souvent, mon petit doigt est juste une fraction de seconde trop lent pour soulever la touche Maj et BAM l'un ou l'autre finit par être capitalisé, c'est ennuyeux!
Pharaun
1
vi a été écrit sur et pour le terminal ADM3A, qui avait une touche désignée pour deux points (:) donc vous n'avez pas besoin d'appuyer sur shift. Si vous remappez une clé qui n'est normalement pas utilisée du tout en mode normal / visuel, comme la barre d'espace, vous ne rencontrerez pas autant ce problème. nnoremap <Space>: et vnomap <Space>: en.wikipedia.org/wiki/File:KB_Terminal_ADM3A.svg
aoeu
J'aime cela pour les commandes save / quit, mais pas pour les mots. Si vous faites l'erreur alors que le filet de sécurité n'est pas là, Vim vous dira votre erreur. Si vous épelez le "teh" alors que la correction automatique n'est pas là, vous ne le remarquerez pas et vous aurez l'air sans instruction.
Robert Martin
5

Je ne savais pas combien de mes 3200 lignes .vimrc étaient juste pour mes besoins excentriques et ce serait assez peu intéressant de les énumérer ici. Mais c'est peut-être pour cela que Vim est si utile ...

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>
rshdev
la source
5

Mon 242 lignes .vimrcn'est pas si intéressant, mais comme personne ne l'a mentionné, j'ai eu l'impression de devoir partager les deux mappages les plus importants qui ont amélioré mon flux de travail en plus des mappages par défaut:

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

Sérieusement, changer de tampon est la chose à faire très souvent. Windows, bien sûr, mais tout ne s'adapte pas si bien à l'écran.

Ensemble similaire de cartes pour une navigation rapide des erreurs (voir quickfix) et des résultats grep:

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

Simple, sans effort et efficace.

nperson325681
la source
Je n'ai pas beaucoup basculé entre les tampons, depuis que Vim prend en charge les onglets. Les touches supplémentaires «Précédent» et «Suivant» de mon clavier sont mappées aux commandes de navigation par onglets.
Don Reba du
@Don Reba, vous savez, les onglets ne font que reproduire certaines des fonctionnalités des tampons. Il n'y a donc pas beaucoup de différence pour "utiliser" des tampons ou des onglets. Les puristes diront que les onglets sont destinés à organiser les tâches dans des régions séparées et rien de plus. Tout ce que je dis, c'est que les tampons ont toute la commodité et que j'ai laissé utiliser des onglets, les réservant à autre chose si quelque chose d'abstraction plus élevée venait à être nécessaire. :)
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
JaredPar
la source
4

J'utilise cscope depuis vim (en utilisant très bien les multiples tampons). J'utilise control-K pour lancer la plupart des commandes (volées de ctags si je me souviens bien). De plus, j'ai déjà généré le fichier .cscope.out.

si a ("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>

fin si

jarret
la source
3

Je suis sous OS X, donc certains d'entre eux peuvent avoir de meilleurs paramètres par défaut sur d'autres plates-formes, mais peu importe:

syntax on
set tabstop=4
set expandtab
set shiftwidth=4
Trenton
la source
1
Vous voudrez peut-être rechercher softtabstopet utiliser cela à la place de tabstop. Laisser tabstopà sa valeur par défaut de 8 aidera lors de la lecture de fichiers que d'autres ont créés avec des onglets.
Greg Hewgill
6
Qu'est-ce que OSX a à voir avec les onglets?
aehlke
3
map = }{!}fmt^M}
map + }{!}fmt -p '> '^M}
set showmatch

= est pour reformater les paragraphes normaux. + est pour le reformatage des paragraphes dans les e-mails cités. showmatch sert à faire clignoter la parenthèse / crochet correspondante lorsque je tape une parenthèse ou un crochet fermés.

Andru Luvisi
la source
3

Utilisez le premier fichier 'tags' disponible dans l'arborescence des répertoires:

:set tags=tags;/

La gauche et la droite servent à changer les tampons, sans déplacer le curseur:

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

Désactivez la mise en évidence de la recherche en appuyant sur une seule touche:

map - :nohls<cr>
Jerub
la source
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>
hasen j
la source
J'aime beaucoup ce qui se passe dans votre configuration. Plusieurs ensembles par ligne if has("gui_running")et des cartes sympas. J'ai copié la plupart de votre configuration dans la mienne. MERCI!
Justin Force
3

Mettez ceci dans votre vimrc:

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

et ne pensez plus jamais à taper un hashrocket. Oui, je sais que vous n'en avez pas besoin dans Ruby 1.9. Mais tant pis.

Mon vimrc complet est ici .

dpogg1
la source
C'est une excellente idée, mais je suggérerais de ne le mapper que pour les fichiers ruby:autocmd FileType ruby imap <C-l> <Space>=><Space>
csexton
Pourriez-vous expliquer ce que cela fait pour une personne Emacs qui ne connaît pas Ruby?
Thomas
Cela ajoute une touche de raccourci Control-L au mode d'insertion de Vim pour taper automatiquement un hashrocket avec des espaces (=>). Le hashrocket est l'opérateur clé-valeur de Ruby pour les hachages.
dpogg1
2

Eh bien, vous devrez récupérer mes configurations vous-même. S'amuser. La plupart du temps, c'est juste la configuration souhaitée, y compris les mappages et les éléments liés à la syntaxe aléatoire, ainsi que la configuration de pliage et une configuration de plugin, un analyseur de compilation de tex, etc.

BTW, quelque chose que j'ai trouvé extrêmement utile est "surligner le mot sous le curseur":

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

Notez que seuls ctermet termfgsont utilisés, car je n'utilise pas gvim. Si vous voulez que cela fonctionne, gvimremplacez-les par guiet guifg, respectivement.

Aleksandar Dimitrov
la source
Comment le faire fonctionner avec plusieurs fenêtres ouvertes? Il semble fonctionner uniquement avec le tampon principal, lancé en premier.
ohnoes
2

J'ai essayé de garder mon .vimrc aussi généralement utile que possible.

Une astuce pratique est un gestionnaire de fichiers .gpg pour les éditer en toute sécurité:

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 '[email protected]' 2>/dev/null
au BufWritePost *.gpg u
pixelbeat
la source
2

1) J'aime une ligne d'état (avec le nom de fichier, la valeur ascii (décimale), la valeur hexadécimale et les lignes standard, cols et%):

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) J'aime aussi les mappages pour les fenêtres séparées.

" <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
Kris Kumler
la source
2

Il n'y a pas grand-chose en fait dans mon .vimrc (même s'il contient 850 lignes). Principalement des paramètres et quelques mappages courants et simples que j'étais trop paresseux pour extraire dans des plugins.

Si vous voulez dire "template-files" par "auto-classes", j'utilise un plugin template-expander - sur ce même site, vous trouverez les ftplugins que j'ai définis pour l'édition C & C ++, certains peuvent être adaptés à C # je suppose.

Concernant l'aspect refactoring, il existe une astuce dédiée à ce sujet sur http://vim.wikia.com ; IIRC, l'exemple de code est pour C #. Cela m'a inspiré un plugin de refactoring qui a encore besoin de beaucoup de travail (il a besoin d'être refactoré en fait).

Vous devriez jeter un œil aux archives de la liste de diffusion de vim, spécialement les sujets sur l'utilisation de vim comme un IDE efficace. N'oubliez pas de jeter un œil à: make, tags, ...

HTH,

Luc Hermitte
la source
2

Mon .vimrc inclut (entre autres choses plus utiles) la ligne suivante:

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

Je me suis ennuyé en apprenant pour mes finales au lycée.

Tadeusz A. Kadłubowski
la source
pouvez-vous expliquer ce que cela fait?
Vijay Dev le
Il affiche une ligne d'état avec le numéro de tampon, le nom du fichier, l'état de modification, la position dans le tampon et un code hexadécimal du caractère sous le curseur. Joliment formaté et coloré.
Tadeusz A. Kadłubowski
1

Voici mon .vimrc. J'utilise 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
Julien Nephtali
la source
1

Qu'y a-t-il dans mon .vimrc?

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

Les vrais fichiers de configuration se trouvent sous ~/.vim/ :)

Et la plupart des éléments parasitent les efforts des autres, adaptés de manière flagrante vim.orgà mon avantage d'édition.

ngn
la source
2
J'ai presque cela mais .vimrc doit contenir "set nocompatible" si vous utilisez ces fonctionnalités n'est-ce pas? Au moins le supprimer provoque une foule d'erreurs ici!
richq le