Was ist in Ihrer .vimrc? [geschlossen]


157

Vi und Vim ermöglichen eine wirklich fantastische Anpassung, die normalerweise in einer .vimrcDatei gespeichert wird . Typische Funktionen für einen Programmierer sind Syntaxhervorhebung, intelligentes Einrücken usw.

Welche anderen Tricks für die produktive Programmierung haben Sie in Ihrer .vimrc versteckt?

Ich interessiere mich hauptsächlich für Refactorings, Autoklassen und ähnliche Produktivitätsmakros, insbesondere für C #.


11
Ich denke, Sie hätten die Leute bitten sollen, ihre kommentierten vim-Konfigurationsdateien zu veröffentlichen.
InnaM

Warum nicht diese Dinge auf Github teilen? Ich habe meinen gesamten .vim-Ordner unter git und alles ist hier zu sehen: github.com/lsdr/vim-folder
lsdr

1
Ich denke nicht, dass ganze .vimrcs nützlich sind; Wenn eine Gruppe von Leuten eine Antwort positiv bewertet, werden Sie dann einfach das Ganze nehmen und es in Ihr System einbinden? Snippets sind viel nützlicher, genauso wie eine Liste nützlicher Aliase oder Funktionen viel besser ist als ganze. (Bash | z) rc-Dateien.
Xiong Chiamiov

Antworten:


104

Du hast danach gefragt :-)

"{{{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
Aber warum 3, Shiftwidth = 3, Softtabstop = 3 ... vielleicht 2 oder 4, aber warum 3?
Johan

1
Sie fragen sich nur, aber wenn Sie jj nicht auf <Esc> abbilden, erhalten Sie eine leichte Verzögerung, wenn Sie j im Einfügemodus drücken?
Sykora

1
@sykora: Ja, aber sobald Sie ein anderes Zeichen eingeben (das ist nicht j), wird es angezeigt. Ich mache das Gleiche, aber stattdessen mit jk, da ich denke, dass das Schlagen von jk schneller ist als das Schlagen von jj. Nur wenn mich das betroffen hat, schreibe ich das Alphabet aus, also bist du vielleicht besser.
David Miani

2
@Johan: weil 'drei eine magische Zahl' ist. :) Eigentlich ist das nur Bikeshedding, aber ich bevorzuge auch drei. :)
Robert Massaioli

4
Wenn echte Männer gcc benutzen, warum nicht? (Compiler gcc ist
auskommentiert

73

Dies ist nicht in meiner .vimrc-Datei, aber gestern habe ich von dem ]pBefehl erfahren . Dadurch wird der Inhalt eines Puffers genau wie hier peingefügt, aber der Einzug wird automatisch an die Zeile angepasst, auf der sich der Cursor befindet! Dies ist hervorragend zum Verschieben von Code geeignet.


Du meinst, das ist ähnlich wie: set paste, p ,: set nopaste?
hyperboreean

3
Soweit ich weiß, hat die Option: set paste keine Auswirkung auf den Befehl p, sondern betrifft nur Text, der im Einfügemodus eingegeben (oder über ein Terminal eingefügt) wird. Also nein, es ist eine andere Funktion.
Greg Hewgill

1
Sollte nicht dafür stimmen, weil es die Frage nicht beantwortet, aber ich mag es sehr;)
gorsky

53

Ich verwende Folgendes, um alle temporären und Sicherungsdateien an einem Ort zu speichern:

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

Spart überall überfüllte Arbeitsverzeichnisse.

Sie werden diese Verzeichnisse zuerst erstellen haben, vim wird nicht sie für Sie erstellen.


2
Ich sollte erwähnen, dass Sie diese Verzeichnisse selbst erstellen müssen, vim erledigt das nicht für Sie.
Harley Holcombe

Behandelt dies mehrere identische Dateien richtig? (zB wenn Sie mehrere verschiedene Zweige desselben Codes
bearbeiten

Nein, dadurch werden alte Sicherungsdateien mit demselben Namen überschrieben. Wenn jemand einen Weg hat, lassen Sie es mich wissen.
Harley Holcombe

3
Versuchen Sie Folgendes: au BufWritePre * let & bex = '-'. Strftime ("% Y% m% d-% H% M% S"). '.vimbackup' (Das ist eine Zeile.) Und das muss ich auch erwähnen: vim.wikia.com/wiki/VimTip962
Zsolt Botykai

1
Dies verhindert auch, dass sich Vim beschwert, wenn Dropbox- synchronisierte Dateien auf mehreren Computern geöffnet werden.
Cody Hess

31

Jemand (nämlich Frew), der oben gepostet hat, hatte diese Zeile:

"CD automatisch in das Verzeichnis, in dem sich die Datei befindet:"

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

Ich habe so etwas selbst gemacht, bis ich herausfand, dass das Gleiche mit einer eingebauten Umgebung erreicht werden kann:

set autochdir

Ich denke, mir ist ein paar Mal etwas Ähnliches passiert. Vim verfügt über so viele verschiedene integrierte Einstellungen und Optionen, dass es manchmal schneller und einfacher ist, eigene Einstellungen vorzunehmen, als in den Dokumenten nach der integrierten Methode zu suchen.


toller Fund! Ich mag es, eingebaute Sachen mehr zu benutzen ^ _ ^. Außerdem schlägt dies nicht fehl, wenn ein | vorhanden ist im Dateinamen.
Javed Ahamed

2
autochdir hat einige Belästigungen, die ich niemals umgehen könnte (Verzeichniswechsel vor dem Laden einer Datei in der Befehlszeile), und ich habe hier auf SO an anderer Stelle gelesen, autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ /was das Gleiche tut, aber die Befehlszeile nicht lähmt.
Dash-Tom-Bang

Ich ziehe es vor, es optional zu machen und diesen Befehl zu verwenden, um das Verzeichnis der aktuellen Datei einzugeben: cd%: h
staackuser2

28

Meine neueste Ergänzung dient zum Hervorheben der aktuellen Zeile

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

2
Gibt es eine Möglichkeit, aus mehr Farben auszuwählen?
Fzs2

Was ist der Unterschied zwischen set cul und set cursorline?
Putolaruan

Ich benutze einfach die "set cul", um eine Zeile unter meiner aktuellen Zeile zu erhalten. Die Cursorzeileneinstellung ist zu stark mit der Syntaxhervorhebung für meinen Geschmack verbunden.
Claes Mogren

2
In diesem Skript ( vim.org/scripts/script.php?script_id=1349 ) finden Sie die verfügbaren Farben. Möglicherweise muss die 256-Farben-Unterstützung für vim aktiviert werden, um eine größere Auswahl zu erhalten.
Brian Wigginton

1
@Claes Eigentlich set culund set cursorlinegenau das Gleiche tun.
Gerardo Marset

24

Update 2012 : Ich würde jetzt wirklich empfehlen, vim-powerline zu testen, das mein altes Statusline-Skript ersetzt hat, obwohl derzeit einige Funktionen fehlen, die ich vermisse.


Ich würde sagen, dass das Statusline-Zeug in meinem vimrc wahrscheinlich am interessantesten / nützlichsten war (aus dem vimrc des Autors hier und dem entsprechenden Blog-Beitrag hier ).

Bildschirmfoto:

Statuszeile 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

Unter anderem informiert es in der Statuszeile über die üblichen Standarddateieinformationen, enthält aber auch zusätzliche Dinge wie Warnungen für: Einfügen, gemischtes Einrücken, nachfolgendes Leerzeichen usw. Ziemlich nützlich, wenn Sie besonders anal über Ihre Codeformatierung sind.

Darüber hinaus und wie im Screenshot gezeigt, können durch die Kombination mit Syntastic Syntaxfehler hervorgehoben werden (vorausgesetzt, in der Sprache Ihrer Wahl ist ein Syntaxprüfer enthalten.


Ich habe Probleme mit den oben genannten. In LongLines () fehlt eine Bedingung. Ich habe es in "while i <Schwelle" geändert, aber es fehlt auch len, das in dieser Bedingung aufgerufen wird. Irgendwelche Ideen zum len?
Ali

Es ist in Ordnung, ich habe die reale Sache hier gefunden: dotfiles.org/~gregf/.vimrc
Ali

@pug Interner Serverfehler dort jetzt. = (Können Sie bitte irgendwo einen Hinweis geben oder einen relevanten Teil von .vimrc einfügen?
Anton Strogonoff

@Anton hat die Paste behoben, die durch die Code-Formatierung durcheinander gebracht wurde. Sollte jetzt gut sein. Ich würde auch empfehlen, es in eine Plugin / statusline.vim-Datei zu stecken, damit es Ihre .vimrc nicht überfüllt, wenn Sie es verwenden möchten.
Gavin Gilmour

@ Gavin Funktioniert hervorragend, danke für das Update und für den Tipp! Früher hatte ich so etwas wie autocmd BufEnter *.py match OverLength /\%81v.\+/in .vimrc, um lange Zeilen hervorzuheben, aber Ihr Ansatz ist möglicherweise weniger ablenkend. Auch das Ergebnis der Syntaxprüfung in der Statusleiste ist eine wirklich coole Sache!
Anton Strogonoff

19

Meine Mini-Version:

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

Die große Version, gesammelt von verschiedenen Orten:

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>

Zu Ihrer Information, 'smartindent' ist veraltet (cindent ersetzt es) und unternimmt nichts, wenn Sie das Einrücken von Dateitypen verwenden. Es ist nur aktiv, wenn es nicht nützlich ist
greywh

13

Manchmal sind die einfachsten Dinge die wertvollsten. Die 2 Zeilen in meiner .vimrc, die absolut unverzichtbar sind:

nore; ::
nore ,;

Ich habe nore \ ;stattdessen getan, da ich ,als meine<leader>
aehlke

3
Aber was macht es? :)
Henrik Bjørnskov

6
Semikolon ist ein selten verwendeter Befehl. Doppelpunkt ist ein äußerst häufiger Befehl, mit dem der Befehlszeilenmodus aufgerufen wird. Durch erneutes Zuordnen können Sie in den Befehlszeilenmodus wechseln, ohne die Umschalttaste zu drücken, wodurch die Muskeln in Ihren kleinen Fingern geschont werden.
William Pursell

7
Auf französischen Tastaturen müssen Sie nicht 'Shift' schreiben, ',', ';' und ':' ... Aber '\', '[' und ']' sind ein echter Schmerz.
Olivier Pons

12

Sonstiges die Einstellungen:

  1. Schalten Sie lästige Fehlerglocken aus:

    set noerrorbells
    set visualbell
    set t_vb=
    
  2. Bewegen Sie den Cursor wie erwartet mit umbrochenen Linien:

    inoremap <Down> <C-o>gj
    inoremap <Up> <C-o>gk
    
  3. Suchen Sie nach ctags"Tags" -Dateien im Verzeichnis, bis eine gefunden wird:

    set tags=tags;/
    
  4. SCons-Dateien mit Python-Syntax anzeigen:

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

Wenn Sie der SConstruct-Datei #! / Usr / bin / python hinzufügen, wird Vims eingebaute Magie zur Erkennung von Dateitypen ausgelöst
richq

Gibt es eine bessere Art und Weise zu machen j/ kbewegen wie mit umwickelten Linien zu erwarten? Ich möchte nicht gjedes Mal drücken .
Puk

8

Ich bin nicht der fortschrittlichste Vim'er der Welt, aber hier sind einige, die ich aufgegriffen habe

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>

Lässt die automatische Vervollständigung der Registerkarte herausfinden, ob Sie dort ein Wort oder eine tatsächliche Registerkarte (4 Leerzeichen) platzieren möchten.

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

Entfernen Sie alle öffnenden Leerzeichen von hier bis zum Ende der Datei. Aus irgendeinem Grund finde ich das sehr nützlich.

set nu! 
set nobackup

Zeigen Sie Zeilennummern an und erstellen Sie keine lästigen Sicherungsdateien. Ich habe sowieso nie etwas von einem alten Backup wiederhergestellt.

imap ii <C-[>

Drücken Sie während des Einfügens zweimal i, um in den Befehlsmodus zu wechseln. Ich bin noch nie auf ein Wort oder eine Variable mit 2 i in einer Reihe gestoßen, und auf diese Weise muss ich nicht meine Finger die Ausgangsreihe verlassen oder mehrere Tasten drücken, um hin und her zu wechseln.


3
Interessante Kartierung von ii ... sehr interessant. Es ist eine ziemlich coole Idee - obwohl ich mir Sorgen machen würde, dass dies meine Fähigkeit, ein Vanille-Vim zu verwenden, stark beeinträchtigen würde, falls ich muss.
Thomasrutter

Ich habe das gleiche gemacht mit ;; seit langer Zeit und habe keine Probleme mehr. Als ich gezwungen wurde, Vanille vi / vim zu verwenden, erinnere ich mich sofort daran, den dummen [esc] Schlüssel zu verwenden (was ein Grund war, warum ich vim so viele Jahre gehasst habe!). Für mich ist diese Einstellung absolut notwendig. Ich würde vi (m) niemals bereitwillig ohne verwenden. <br> Und ich mag die Idee, 'ii' anstelle von ';;' zu verwenden: intuitiver, fast wie ein Toggle.
Bilderstürmer

Eine andere Möglichkeit besteht darin, Strg-C zu verwenden, um den Einfügemodus zu verlassen. Es macht fast das gleiche wie Escape (der einzige Unterschied, der mich stört, ist, wenn ich auf den Linien eines visuellen Blocks arbeite).
A3NM

8

Mein stark kommentierter vimrc mit Readline-ähnlichen (Emacs) Tastenkombinationen:

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

Zu Ihrer Information, 'smartindent' ist veraltet (cindent ersetzt es) und unternimmt nichts, wenn Sie das Einrücken von Dateitypen verwenden. Es ist nur aktiv, wenn es nicht nützlich ist
greywh

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

Einige Korrekturen für häufige Tippfehler haben mir überraschend viel Zeit gespart:

: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
Ich mag das nicht - es trainiert nur Fehler.
Svante

Ich mag es für die Worte: und, das, aber nicht für das Speichern und Beenden
Sixtyfootersdude

3
@Svante, normalerweise würde ich zustimmen, außer ich habe dies auch in meinem Befehl, ich neige dazu, oft zu speichern oder oft zu speichern / zu beenden. Oft ist mein kleiner Finger beim Abheben der Umschalttaste nur einen Bruchteil einer Sekunde zu langsam, und die eine oder andere BAM wird groß geschrieben, was ärgerlich ist!
Pharaun

1
vi wurde auf und für das ADM3A-Terminal geschrieben, das eine bestimmte Taste für Doppelpunkt (:) hatte, sodass Sie nicht die Umschalttaste drücken mussten. Wenn Sie eine Taste neu zuordnen, die im normalen / visuellen Modus normalerweise überhaupt nicht verwendet wird, wie z. B. die Leertaste, tritt dieses Problem nicht so häufig auf. nnoremap <Space>: und vnomap <Space>: en.wikipedia.org/wiki/File:KB_Terminal_ADM3A.svg
aoeu

Ich mag dies für die Befehle zum Speichern / Beenden, aber nicht für die Wörter. Wenn Sie den Fehler machen, wenn das Sicherheitsnetz nicht vorhanden ist, teilt Ihnen Vim Ihren Fehler mit. Wenn Sie das als "teh" buchstabieren, wenn die Autokorrektur nicht vorhanden ist, werden Sie es nicht bemerken und Sie werden ungebildet aussehen.
Robert Martin

5

Ich wusste nicht, wie viele meiner 3200 .vimrc-Leitungen nur für meine skurrilen Bedürfnisse waren und es wäre ziemlich wenig inspirierend, sie hier aufzulisten. Aber vielleicht ist Vim deshalb so nützlich ...

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

Meine 242-Zeile .vimrcist nicht so interessant, aber da es niemand erwähnte, hatte ich das Gefühl, dass ich neben den Standardzuordnungen die beiden wichtigsten Zuordnungen teilen muss, die meinen Workflow verbessert haben:

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

Im Ernst, Puffer Schalt ist die Sache sehr oft zu tun. Windows, klar, aber alles passt nicht so gut auf den Bildschirm.

Ähnliche Karten zum schnellen Durchsuchen von Fehlern (siehe Quickfix) und Grep-Ergebnissen:

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

Einfach, mühelos und effizient.


Ich habe nicht viel zwischen Puffern gewechselt, da Vim Tab-Unterstützung bekam. Ich habe die zusätzlichen Tasten "Zurück" und "Vorwärts" auf meiner Tastatur, die den Navigationsbefehlen der Registerkarten zugeordnet sind.
Don Reba

@ Don Reba, wissen Sie, die Registerkarten replizieren nur einige der Funktionen der Puffer. Es gibt also keinen großen Unterschied, Puffer oder Tabs zu "verwenden". Puristen werden sagen, dass Registerkarten Aufgaben organisieren sollen, um Regionen zu trennen, und nicht mehr. Alles was ich sage ist, dass Puffer den ganzen Komfort haben und dass ich Tabs verwendet habe, um sie für etwas anderes zu reservieren, falls etwas höhere Abstraktion benötigt wird. :)
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

Ich benutze cscope aus vim heraus (wobei ich die mehreren Puffer sehr gut benutze). Ich benutze control-K, um die meisten Befehle zu initiieren (die, wie ich mich erinnere, von ctags gestohlen wurden). Außerdem habe ich bereits die Datei .cscope.out generiert.

if has ("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>

endif



3

Ich bin unter OS X, daher haben einige davon möglicherweise bessere Standardeinstellungen auf anderen Plattformen, aber unabhängig davon:

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

1
Vielleicht möchten Sie nachschlagen softtabstopund das stattdessen verwenden tabstop. Das Beibehalten tabstopdes Standardwerts von 8 hilft beim Lesen von Dateien, die andere mit Registerkarten erstellt haben.
Greg Hewgill

6
Was hat OSX mit Tabs zu tun?
Aehlke

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

= dient zum Neuformatieren normaler Absätze. + dient zum Neuformatieren von Absätzen in zitierten E-Mails. showmatch dient zum Flashen der passenden Klammer / Klammer, wenn ich eine enge Klammer oder Klammer eingebe.


3

Verwenden Sie die erste verfügbare 'Tags'-Datei im Verzeichnisbaum:

:set tags=tags;/

Links und rechts dienen zum Umschalten der Puffer, ohne den Cursor zu bewegen:

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

Deaktivieren Sie die Suchhervorhebung mit einem einzigen Tastendruck:

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>

Ich mag viel von dem, was in Ihrer Konfiguration vor sich geht. Mehrere Sätze pro Zeile if has("gui_running")und coole Karten. Ich habe den größten Teil Ihrer Konfiguration in meine kopiert. VIELEN DANK!
Justin Force

3

Fügen Sie dies in Ihr vimrc ein:

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

und denken Sie nie wieder daran, ein Hashrocket zu tippen. Ja, ich weiß, dass Sie dies in Ruby 1.9 nicht müssen. Aber egal.

Mein volles vimrc ist hier .


Dies ist eine großartige Idee, aber ich würde vorschlagen, sie nur für Ruby-Dateien autocmd FileType ruby imap <C-l> <Space>=><Space>
zuzuordnen

Können Sie erklären, was das für eine Emacs-Person bedeutet, die Ruby nicht kennt?
Thomas

Dies fügt dem Einfügemodus von Vim einen Control-L-Hotkey hinzu, um automatisch ein Hashrocket mit Leerzeichen (=>) einzugeben. Das Hashrocket ist Rubys Schlüsselwertoperator für Hashes.
dpogg1

2

Nun, du musst meine Konfigurationen selbst aufräumen . Habe Spaß. Meistens ist es nur mein gewünschtes Setup, einschließlich Mappings und zufälliger syntaxrelevanter Dinge sowie Folding-Setup und einige Plugin-Konfigurationen, ein Tex-Compilation-Parser usw.

Übrigens, etwas, das ich äußerst nützlich fand, ist "Wort unter Cursor hervorheben":

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

Beachten Sie, dass nur ctermund termfgverwendet werden, weil ich nicht benutze gvim. Wenn Sie möchten , dass bei der Arbeit gvimnur Replac sie mit guiund guifgsind.


Wie funktioniert es, wenn mehrere Fenster geöffnet sind? Es scheint nur mit dem Hauptpuffer zu funktionieren, der als erster gestartet wurde.
ohnoes

2

Ich habe versucht, meine .vimrc so allgemein nützlich wie möglich zu halten.

Ein praktischer Trick ist ein Handler für GPG-Dateien, mit dem sie sicher bearbeitet werden können:

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) Ich mag eine Statuszeile (mit dem Dateinamen, dem ASCII-Wert (dezimal), dem Hex-Wert und den Standardzeilen, Spalten und%):

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) Ich mag auch Zuordnungen für geteilte Fenster.

" <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

In meiner .vimrc ist eigentlich nicht viel (auch wenn sie 850 Zeilen hat). Meistens Einstellungen und ein paar allgemeine und einfache Zuordnungen, die ich zu faul war, um sie in Plugins zu extrahieren.

Wenn Sie "Vorlagendateien" mit "Autoklassen" meinen, verwende ich ein Template-Expander-Plugin. Auf derselben Site finden Sie die ftplugins, die ich für die C & C ++ - Bearbeitung definiert habe. Einige sind möglicherweise angepasst C # Ich denke.

In Bezug auf den Refactoring-Aspekt gibt es auf http://vim.wikia.com einen Tipp zu diesem Thema . IIRC Der Beispielcode ist für C #. Es hat mich zu einem Refactoring-Plugin inspiriert, das noch viel Arbeit benötigt (es muss tatsächlich überarbeitet werden).

Sie sollten sich die Archive der vim-Mailingliste ansehen, insbesondere die Themen zur Verwendung von vim als effektive IDE. Vergessen Sie nicht, einen Blick darauf zu werfen: make, tags, ...

HTH,


2

Meine .vimrc enthält (unter anderem nützlichere Dinge) die folgende Zeile:

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

Ich langweilte mich beim Lernen für mein Abitur.


Können Sie bitte erklären, was dies bewirkt?
Vijay Dev

Es zeigt eine Statuszeile mit Puffernummer, Dateiname, Änderungsstatus, Position innerhalb des Puffers und einem Hex-Code des Zeichens unter dem Cursor. Schön formatiert und farbig.
Tadeusz A. Kadłubowski

1

Hier ist meine .vimrc. Ich benutze 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

Was ist in meinem .vimrc?

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

Die realen Konfigurationsdateien liegen unter ~/.vim/ :)

Und die meisten Dinge, die es gibt, sind parasitierend für die Bemühungen anderer Leute, offensichtlich angepasst vim.organ meinen Bearbeitungsvorteil.


2
Ich habe das fast, aber .vimrc muss "set nocompatible" enthalten, wenn Sie diese Funktionen verwenden, nicht wahr? Zumindest das Entfernen verursacht hier eine Menge Fehler!
Richq
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.