ubuntuusers.de

Sammelthread: Vim, .vimrc und Vim-Konfiguration allgemein

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

kutteldaddeldu Team-Icon

Anmeldungsdatum:
1. Juli 2008

Beiträge: 3586

Soweit ich das sehe, gibt's im Forum noch keinen Sammelthread zum Thema Vim-Konfiguration. Da ich die entsprechenden Threads im französischen Forum oder bei Stack Overflow äußerst interessant finde, hier jetzt dieser Thread für unser Forum.

Also: Welche interessanten Konfigurationstipps habt Ihr für den besten Editor der Welt? (Wer in diesen Thread gefunden hat, wird mir mit dieser Einschätzung wohl zustimmen – wer sich hierher nur verirrt hat, muss weghören ☺ !) Schön wäre es, wenn diese Tipps etwas ausgefallener wären (also nicht nur Tipps wie set incsearch etc.) und Ihr eine kurze Erläuterung liefern könntet.

Ich fang mal mit (wild im Web zusammengesuchten) Bestandteilen meiner .vimrc an:

" Mein Farbschema (http://www.vim.org/scripts/script.php?script_id=1259)
colorscheme sienna

" Zum Wechseln in den Normal-Modus mit der (wohl sonst nie?) gebrauchten Tastenkombination "jj"
inoremap jj <Esc>

" Mit Space und "-" runter- und hochscrollen (ähnlich wie bei Browsern)
noremap <Space> <C-f>
noremap - <C-b>

" Unterdrückung des Startup-Screens 
set shortmess+=I

" Vervollständigt Klammern
set matchpairs=(:),{:},[:],<:> 

" Funktion zum Aufrufen eines Links im Browser (hier: Opera) mit \gw
function! Browser ()
 let line = getline (".")
 let line = matchstr (line, "http[^ ]*")
 execute "!opera ".line
endfunction
map <Leader>gw :call Browser ()<CR>

" Wordcount (nach http://stackoverflow.com/questions/114431/fast-word-count-function-in-vim, Lösung 1); Funktion nur sinnvoll bei kleinen Dateien (bei großen, wenn Statusleiste permanent an, extrem träge)
function! WordCount()
  let lnum = 1
  let n = 0
  while lnum <= line('$')
    let n = n + len(split(getline(lnum)))
    let lnum = lnum + 1
  endwhile
  return n
endfunction

" Meine Statusleiste (bei großen Dateien sollte die WordCount-Funktion entfernt werden, wenn die Statusanzeige permanent an ist)
set statusline=%F\ [%Y\|%{strlen(&fenc)?&fenc:'none'}\\|%{&ff}]\ \%10([row\ %l\|col\ %c\|%P]%)\ %{WordCount()}\ words\ %r\%=%{strftime(\"%d\.%m.\%y\ \(%H:%M\)\")} 

" Oben und unten werden immer zusätzlich die 2 jeweils angrenzenden Zeilen angezeigt
set scrolloff=2

" Ähnlich wie die Tastenkombination xp, nur erlaubt hier die Tastenkombination gw das Vertauschen von 2 Wörtern, nicht Buchstaben
nmap <silent> gw    "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<cr><c-o><c-l>

" Bei aktiviertem Anzeigen aller Suchergebnisse kann man hiermit durch Esc die Markierungsanzeigen einmalig unterbinden 
:nnoremap <esc> :noh<return><esc>

" Leichteres Navigieren in Splits (mit Ctrl und h bzw. l) 
nnoremap <C-h> <C-w>h
nnoremap <C-l> <C-w>l

Dazu kommen dann natürlich noch viele Abkürzungen und Tastenkombinationen und eher übliche (= in Einleitungen häufig erwähnte) Einstellungen.

Lieblings-Plugins von mir sind die LaTeX-suite, VimOutliner, der NERD tree, das Most Recently Used Plugin sowie Surround (und dann noch einige Plugins für spezielle Dateiformate).

Nade

Anmeldungsdatum:
22. September 2010

Beiträge: 14

set nocompatible "kein Kompatibilitätsmodus
colorscheme nuvola "Farbschema verfügbar: whitebox, ironman, martin_krischik, nuvola, delek, peachpuff
set autoindent "automatische Texteinrückung
set autoread "automatisch neueinlesen der Datei bei externer Änderung
"set background=dark
set backspace=indent,eol,start "Verhalten vom löschen: über Einzug, über Zeilenende, über Zeilenanfang
set nobackup "kein Backup anlegen
set backupdir=$HOME/.vim/backups "Backupverzeichnis
set browsedir=buffer "Verzeichnis der editierten Datei für File Browser verwenden
set cdpath=,, "suchpfad für :cd und :lcd
set charconvert="" "Ausdruch für wie character konvertierung aufgerufen wird
set diffexpr=WinDiff() "Ausdruck für diff WinDiff() genommen aus standard Windows vim, diff muss in Verzeichnis von $VIMRUNTIME liegen!
function WinDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let eq = ''
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\<cmd'
      let cmd = '""' . $VIMRUNTIME . '\diff"'
      let eq = '"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction
set cmdheight=2 "Höhe der Kommandozeile in Zeilen
set complete=.,w,b,u,U,k,s,i,t "wo überall nach komplettierungen suchen
set confirm "Dialog bei ungespeicherten Veränderungen
set cursorcolumn "hebt Spalte in der sich Cursor befindet hervor
"set dictionary="" Wortlisten für komplettierungs-kommandos
set directory=$HOME/.vim/swaps
set encoding=utf-8 "internes Kodierungsformat; nur mit multibyte!
set noexpandtab "keine Tabs, entsprechende Anzahl an spaces
set fileformat=dos "end of line codierung; alternative: unix
"set foldclose= "Verhalten, welche folds automatisch geschlossen werden, wenn kein cursor drin ist
set foldcolumn=2 "Spalte welche folds anzeigt, zahl gibt breite an
set foldenable "schaltet folding an und aus
set foldlevel=10 "ab welchem level folds geschlossen werden
set foldmarker={,} "bei welchen markern gefaltet werden soll; default: {{{,}}}
set foldmethod=marker "wann gefaltet werden soll; andere werte manual (manuell falten) indent (bei gleichem Einzug falten) expr (anzugebenden Ausdruck zum falten benutzen)
set foldminlines=1 "mindestanzahl, ab wann folds geschlossen werden
set foldnestmax=10 "maximalanzahl an geschachtelten folds
function SimpleFoldText()
  return getline(v:foldstart).' '
endfunction
set foldtext=SimpleFoldText() " Custom fold text function 
set formatoptions=rnq "formatierungsoptionen r: Kommentarzeichen automatisch nach enter einfügen; n: nummerierte Listen erkennen; q: gq zum formatieren von Kommentaren verwenden VIM: change.txt
"set guicursor=i-ci:ver30-iCursor-blinkwait300-blinkon200-blinkoff150
set helplang=de "Hilfesprache, falls ein deutsch verfügbar wird englisch genommen
set history=50 "Anzahl an Kommandos die gemert werden
set icon "Fensterzeile ändern
set ignorecase "Groß/Kleinschreibung bei der suche ignorieren
set incsearch "schon suchen während man noch tippt
"set insertmode "Dreht modi rum
set laststatus=2 "Statuszeile immer anzeigen
set lazyredraw "Screen nicht neuzeichnen, wenn macros laufen
"set linespace=3 "Zeilenabstand; in msys nicht benutzt
set list "tabs etc anzeigen
set listchars=tab:>-,trail:-,nbsp:%,extends:},precedes:{ "Zeichen die verwendet werden sollen
set matchpairs=(:),{:},[:],<:> "Zeichen, die zusammengehören und einen Block bilden
set mouse=a "Maus einschalten
set mousemodel=popup_setpos "Mausverhalten
set number "Zeilennummern anzeigen
set numberwidth=1 "Spaltenanzahl für Zeilennummern
set path=.,/include,/usr/include,, "Pfade wo nach Dateien gesucht wird
set ruler "Cursorposition anzeigen
set runtimepath=$HOME/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$HOME/.vim/after "default
set scrolloff=5 "Anzahl an Zeilen, die in der Umgebung des Cursors angezeigt werden
set shiftround "Einzüge auf ganze Vielfach von shiftwidth biegen
set shiftwidth=4 "anzahl an spaces pro Einzug
set showbreak=$> "Zeichen, das bei Zeilenumbrüchen erscheint
set showcmd "kommando in der letzten Zeile des Screens
set showmatch "Zeige dazu passende Klammern
set sidescroll=4 "setliches Scrollen
set sidescrolloff=5 "seitliches Voraus-Scrollen
set smarttab "tab fügt shiftwidth an spaces ein
set softtabstop=4 "anzahl an spaces die ein tab wert ist
set statusline=%F%m%r%h%w[%{&ff}]%y[%p%%][%l,%c%V]
set tabstop=8 "Länge eines Tabs
set title "den Konsolentitel setzen
set ttyfast "wir haben ne schnelle Konsole
set undolevels=1000 "Anzahl an zurückgehbaren schritten
"set visualbell "visueller hinweis anstatt biepen
set whichwrap=b,s,h,l,<,>,~,[,] "jede Taste springt über Zeilengrenzen
set wildignore=*.dll,*.o,*.obj,*.bak,*.exe,*.pyc,*.jpg,*.gif,*.png "Dateitypyen, die beim komplettieren ignoriert werden
set wildmenu "Komplettierung mit menü
set wildmode=list:longest "komplettierungsmodus
set nowrap "seitliches Scrollen, kein Zeilenumbruch
syntax on
filetype plugin indent on

Ich hab in meiner .vimrc ne umfassende Sammlung an Einstellungen drin. Was ich aber noch suche wäre ein vernünftiges Theme für helle und dunkle Terminal gleichermaßen (weil Konsole für gewöhnlich schwarzer Hintergrund, aber in KDE bevorzuge ich weiße Hintergründe) die vimrc ist außerdem größtenteils zusammenkopiert, weiß aber nicht mehr welche Website das war (und es scheint ich hab mir auch keinen Link gespeichert)

Als Plugins hab ich meist nur NerdTree und das C-Plugin. Aber ich nutz vim auch nicht in seinem vollen Ausmaß

nuich

Anmeldungsdatum:
15. Juni 2009

Beiträge: 13

Bei mir geht's weniger um die Konfiguration, sondern um was Grundsätzliches zum Thema Plugins:

Wenn ich im Vim das Plugin calendar aufrufen will (:calendar), erscheint nur: "E492: Kein Editorbefehl: calendar".

So geht es mir auch bei anderen Plugins.

Hab ich bei der Bedienung etwas mißverstanden?

kutteldaddeldu Team-Icon

(Themenstarter)

Anmeldungsdatum:
1. Juli 2008

Beiträge: 3586

nuich schrieb:

Wenn ich im Vim das Plugin calendar aufrufen will (:calendar), ...

Hast Du's großgeschrieben?

:Calendar

nuich

Anmeldungsdatum:
15. Juni 2009

Beiträge: 13

Ja. Kommt alles aufs Gleiche raus. :calendar; :Calendar; :cal; :Cal

Kein Unterschied feststellbar. Immer die gleiche Meldung. Dies betrifft alle Plugins unter "/usr/share/vim-scripts/plugin". Wenn ich im Homeverzeichnis ein eigenes Verzeichnis namens "~/.vim/plugin(s)" anlege, geschieht auch nichts anderes.

zim

Avatar von zim

Anmeldungsdatum:
27. Juni 2005

Beiträge: 662

Wohnort: bremen

Hey,

bin zwar selber ein Vim-Anfänger, aber folgendes hat mir gestern beim vim-latex Plugin geholfen:

vim-addons install pluginname

und dann gucken, ob es geklappt hat

vim-addons status

Grüsse

zim

EDIT: Mit dem Calendar-Plugin klappt das oben beschriebene anscheinend nicht, aber das speichern der calendar.vim in den Ordner "~/.vim/plugin" und neustarten von vim haben zur "installation" schon gereicht.

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Kuttel Daddeldu schrieb:

...
" Oben und unten werden immer zusätzlich die 2 jeweils angrenzenden Zeilen angezeigt
set scrolloff=2
...

Man erfährt doch immer wieder was neues. Das klingt sehr praktisch. 😎

Mal sehen, was gab’s noch nicht:

" Tabs mit ä und ö wechseln.
nmap ä gt
nmap ö gT

" Tabs verschieben.
fun! TabMove(d)
	if a:d == -1
		if tabpagenr() > 1
			exe ":tabm ".(tabpagenr() - 2)
		endif
	else
		exe ":tabm ".tabpagenr()
	endif
endfun
nmap Ä :call TabMove(1)<CR>
nmap Ö :call TabMove(-1)<CR>
" Leader auf's Komma, das ist frei und gut erreichbar.
let mapleader=","
let maplocalleader=","
" Im visuellen Modus mit ,c Spalten formatieren.
vnoremap <Leader>c :!sed 's/^/-/' \| column -t \| sed 's/^-//'<CR>
vnoremap <Leader>C :!sed 's/^/-/' \| column -t \| sed 's/^-//'<CR>gv=
" Hotkeys, die die Tabbreite ändern.
for i in range(1, 8)
	exe 'map <ESC>'.i.' :set ts='.i.' sw='.i.'<CR>'
endfor
" Color Column!
set colorcolumn=80,130,+1
" Mit CTRL in Bildschirmzeilen scrollen (nur relevant bei Wrapping).
map <C-K> gk
map <C-J> gj
" Komfortfunktionen für dotfiles.
autocmd BufWritePost .vimrc source $MYVIMRC
nmap <Leader>dotv :tabe $MYVIMRC<CR>
nmap <Leader>dotV :source $MYVIMRC<CR>
nmap <Leader>dotb :tabe ~/.bashrc<CR>
	\:tabe ~/git/dotfiles/.bash_aliases<CR>
	\:tabe ~/git/dotfiles/.bash_functions<CR>
nmap <Leader>dotm :tabe ~/.muttrc<CR>
nmap <Leader>dotx :tabe ~/.Xdefaults<CR>
nmap <Leader>dota :tabe ~/git/dotfiles/.awesome-laptop/rc.lua<CR>
	\:tabe ~/git/dotfiles/.awesome-laptop/theme.lua<CR>
	\:tabe ~/git/dotfiles/.awesome-desktop/rc.lua<CR>
	\:tabe ~/git/dotfiles/.awesome-desktop/theme.lua<CR>

nuich

Anmeldungsdatum:
15. Juni 2009

Beiträge: 13

zim schrieb:

vim-addons install pluginname

EDIT: Mit dem Calendar-Plugin klappt das oben beschriebene anscheinend nicht, aber das speichern der calendar.vim in den Ordner "~/.vim/plugin" und neustarten von vim haben zur "installation" schon gereicht.

Danke. Hat geklappt.

John_W

Anmeldungsdatum:
10. Juli 2010

Beiträge: 571

Ich hab bei mir noch:

" Maus benutzbar machen
set mouse=a

" Tabs zu Leerzeichen umwandeln
set expandtabs

" Plugins in den angegebenen Ordnern benutzbar machen
set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim72,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after

" Beim einfügen von Klammern zum Gegenstück springen (hier für 30 Sekunden, weitertippen oder Cursor bewegen zum direkten zurückspringen)
" die Hilfe sagt recht passend: Use of the short form is rated PG [=Parental Guidance Suggested].
set showmatch
set matchtime=30

" Beim Suchen standardmäßig die Groß- und Kleinschreibung ignorieren; mit \cwort wird wort ohne Groß-/Kleinschreibung gesucht; umgekehrt kann man bei noignorecase die Groß-Kleinschreibung temporär mittels \Cwort ignorieren
set ignorecase

kutteldaddeldu Team-Icon

(Themenstarter)

Anmeldungsdatum:
1. Juli 2008

Beiträge: 3586

Bei mir kommt es häufig vor, dass ich Vim (schnell mit Shortcut, daher ohne Dateiangabe) aufrufe, um kurz ein paar Notizen zu machen (z.B. bei einem Telefongespräch). Der folgende Shortcut ist zwar extrem billig, für mich teilweise aber in solchen Situationen ganz hilfreich:

nmap <S-F8> :sav ~/Notizen.txt<CR>
imap <S-F8> <ESC>:sav ~/Notizen.txt<CR>

Shift+F8 speichert so einfach die vorher namenlose Datei im Homeverzeichnis unter dem Namen „Notizen.txt“. Nichts Weltbewegendes, aber ...

adun Team-Icon

Avatar von adun

Anmeldungsdatum:
29. März 2005

Beiträge: 8606

Wichtig (=ich krieg die Krise, wenn ich es nicht habe) finde ich das Plugin COMMAND-T. Zum Installieren muss vim mit Rubysupport kompiliert sein, also das Paket vim-nox installieren. COMMAND-T ist eine reguläre Suche mit Dateihierarchie. Wenn man eine gute logische Ordnerstruktur hat, sehr praktisch.

zim

Avatar von zim

Anmeldungsdatum:
27. Juni 2005

Beiträge: 662

Wohnort: bremen

Wow, das ist mal ein cooles Plugin 😀

(Erst hab ich gedacht es hat Vim zum abstürzen gebracht, aber es hat wohl nur home(?) gescannt ^^)

1984

Avatar von 1984

Anmeldungsdatum:
2. März 2008

Beiträge: 545

Hey hey,

vielen Dank schonmal für die schönen Konfigurationsdateien ☺ Das mit dem Klammern vervollständigen mit "matchpairs" klappt bei mir aber irgendwie nicht so ganz wie ich's will. Fehlt mir da eine Option oder habe ich da was falsch verstanden? Hier mal ein Stück meiner vimrc, falls es jemanden interessiert 😉

set number      "Nummerierung der Zeilen
"set ai         "Rueckt den Text automatisch ein
set tabstop=3
set expandtab   "Tab wird durch Leerzeichen aufgefuellt
map! jj <ESC>   
map! JJ <ESC>
vmap JJ <ESC>
set hlsearch    "highlighted die gesuchten Woerter
set scrolloff=4 "scrolled schon 4 Zeilen vor Ende
set ttyfast     "schnelle Terminalverbindung vorhanden
colorscheme 1984 " Colorscheme
set clipboard=unnamed " Benutzt die Systemregister für copy & paste
set pastetoggle=<F8> " Verhindert Einrückung beim Einfügen
set shiftwidth=3 "automatische einrueckung auch nur 4
set softtabstop=3 " gehoert zu shiftwidth dazu
" Bei aktiviertem Anzeigen aller Suchergebnisse kann man hiermit durch t die Markierungsanzeigen einmalig unterbinden 
:nnoremap t :noh<return><Esc>
" Vervollständigt Klammern
set matchpairs=(:),{:},[:],<:>

" Copy und Paste in bestimmten Buffer
" map <C-q> "+l
" map <C-w> "+i

" Foldingoptionen
set foldmethod=indent
set foldnestmax=2    
set foldminlines=0

Sehr toll finde ich auch "set clipboard=unnamed", da ich immer mehrere Terminals auf habe in denen ich vim benutze (ja ich weiß, dass man auch splitten kann). Dadurch kann man schön zwischen den einzelnen Terminals mit "yy" und "p" hin und her kopieren

Grüße, 1984

kutteldaddeldu Team-Icon

(Themenstarter)

Anmeldungsdatum:
1. Juli 2008

Beiträge: 3586

Das mit dem Klammern vervollständigen mit "matchpairs" klappt bei mir aber irgendwie nicht so ganz wie ich's will.

Ich hab gerade mal bei mir Deine vim.rc ausprobiert: bei mir klappt „matchpairs“. Wenn ich also eine runde linke Klammer eingebe, wird automatisch die rechte erzeugt. Das einzige, was nicht klappt – auch mit meiner eigenen vim.rc nicht, wie ich gerade gesehen habe) –, ist die Auto-Vervollständigung von eckigen Klammern (= der Kleiner-/Größer-Zeichen).

Was ich mir höchstens noch vorstellen könnte: die Option kommt sich mit den Voreinstellungen für bestimmte Dateitypen in die Quere.

1984

Avatar von 1984

Anmeldungsdatum:
2. März 2008

Beiträge: 545

Hey hey,

also ich habe jetzt rumprobiert und es klappt einfach nicht. Unter anderem habe ich es mit .java, .cpp und ohne Endung probiert. Es hat sich nix getan. Außerdem habe ich öfters gelesen, dass diese Konfiguration nur für's "zur-anderen-Klammer-springen" gedacht ist und nicht um dazugehörende Klammern zu erstellen. Bist du dir wirklich sicher, dass es nicht ein Plugin ist, dass das für dich macht? Weil ich wüsste wirklich nicht mehr, woran es bei mir liegen könnte...

Grüße, 1984

Antworten |