vi_vim
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| vi_vim [2025-08-15 21:10:50] – [Automatischen Visual Mode mit Maus deaktivieren] david | vi_vim [2026-06-23 17:06:12] (aktuell) – [setup] david | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== vi / vim ====== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | * '': | ||
| + | * '': | ||
| + | * '': | ||
| + | * '': | ||
| + | * '': | ||
| + | * '': | ||
| + | * '': | ||
| + | * '': | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | * '': | ||
| + | * '': | ||
| + | |||
| + | <code bash> | ||
| + | update-alternatives --config editor | ||
| + | # ODER | ||
| + | echo " | ||
| + | # ODER | ||
| + | export " | ||
| + | export " | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== vim config ===== | ||
| + | |||
| + | |||
| + | ==== setup ==== | ||
| + | |||
| + | <code bash> | ||
| + | # vim xdg dirs: ~/ | ||
| + | vim_config_dir=" | ||
| + | vim_data_dir=" | ||
| + | vim_state_dir=" | ||
| + | |||
| + | # migrate old ~/.vim | ||
| + | test -d " | ||
| + | |||
| + | # create vim dirs that don't exist already | ||
| + | mkdir -p " | ||
| + | |||
| + | # migrate old ~/.vimrc & ~/.viminfo | ||
| + | test -f " | ||
| + | |||
| + | # optional: disable mouse | ||
| + | echo "set mouse=" | ||
| + | echo "set ttymouse=" | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== minimal ==== | ||
| + | |||
| + | * Maus deaktivieren: | ||
| + | * Damit die Farben sowohl bei weißem als auch bei schwarzem Hintergrund im '' | ||
| + | |||
| + | <code bash> | ||
| + | cat << ' | ||
| + | unlet! skip_defaults_vim | ||
| + | source $VIMRUNTIME/ | ||
| + | source $VIMRUNTIME/ | ||
| + | |||
| + | colorscheme ron | ||
| + | filetype plugin indent off | ||
| + | syntax on | ||
| + | |||
| + | set encoding=utf-8 | ||
| + | set fileformats=unix, | ||
| + | set mouse= | ||
| + | set ttymouse= | ||
| + | |||
| + | set secure | ||
| + | EOF | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== erweitert ==== | ||
| + | |||
| + | * inkl. xdg base dir spec | ||
| + | * siehe dotfiles repo für aktuellste version: [[https:// | ||
| + | |||
| + | <code vim ~/ | ||
| + | unlet! skip_defaults_vim | ||
| + | source $VIMRUNTIME/ | ||
| + | if empty($XDG_CONFIG_HOME) | source ~/ | ||
| + | |||
| + | packadd! matchit | ||
| + | |||
| + | colorscheme torte | ||
| + | filetype plugin indent on | ||
| + | syntax on | ||
| + | |||
| + | highlight Normal cterm=NONE ctermbg=NONE ctermfg=NONE gui=NONE guibg=NONE guifg=NONE | ||
| + | |||
| + | set autoindent | ||
| + | set backspace=indent, | ||
| + | set encoding=utf-8 | ||
| + | set fileformats=unix, | ||
| + | set hlsearch | ||
| + | set ignorecase | ||
| + | set incsearch | ||
| + | set list | ||
| + | set listchars=eol: | ||
| + | set mouse= | ||
| + | set number | ||
| + | set relativenumber | ||
| + | set ruler | ||
| + | set scrolloff=5 | ||
| + | set shiftwidth=0 | ||
| + | set showcmd | ||
| + | set showmatch | ||
| + | set showmode | ||
| + | set signcolumn=number | ||
| + | set smartcase | ||
| + | set smartindent | ||
| + | set smarttab | ||
| + | set smoothscroll | ||
| + | set softtabstop=-1 | ||
| + | set tabstop=4 | ||
| + | set timeout | ||
| + | set ttimeout | ||
| + | set ttimeoutlen=-1 | ||
| + | set ttymouse= | ||
| + | set wildmenu | ||
| + | |||
| + | set secure | ||
| + | </ | ||
| + | |||
| + | <code vim ~/ | ||
| + | " source $VIMRUNTIME/ | ||
| + | " to update from upstream xdg.vim run this vim command inside this file: | ||
| + | " :6,$delete | 5read $VIMRUNTIME/ | ||
| + | " then uncomment the xdg options below again | ||
| + | |||
| + | " XDG Base Directory support | ||
| + | " This script sets up paths for XDG compliance. | ||
| + | " Maintainer: | ||
| + | " Last Change: | ||
| + | |||
| + | let s:config = empty($XDG_CONFIG_HOME) ? expand(" | ||
| + | let s: | ||
| + | let s: | ||
| + | |||
| + | if isdirectory(s: | ||
| + | func s: | ||
| + | if !isdirectory(a: | ||
| + | call mkdir(a: | ||
| + | endif | ||
| + | return a:dir | ||
| + | endfunc | ||
| + | |||
| + | " Use Data for packages, prevent duplicates | ||
| + | if index(split(& | ||
| + | exe $"set packpath^={s: | ||
| + | exe $"set packpath+={s: | ||
| + | endif | ||
| + | |||
| + | " These options are not set by default because they change the behavior of | ||
| + | " where files are saved. Uncomment them if you want to fully move all | ||
| + | " transient/ | ||
| + | " Note: Undo/ | ||
| + | " while Swap/ | ||
| + | |||
| + | " Persistent Data: | ||
| + | let & | ||
| + | let & | ||
| + | let g: | ||
| + | call s: | ||
| + | |||
| + | " Transient State: | ||
| + | let & | ||
| + | let & | ||
| + | let & | ||
| + | |||
| + | delfunction s:mkvimdir | ||
| + | endif | ||
| + | |||
| + | unlet s:config s:data s:state | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== alternativ ==== | ||
| + | |||
| + | <code vim ~/ | ||
| + | unlet! skip_defaults_vim | ||
| + | source $VIMRUNTIME/ | ||
| + | source $VIMRUNTIME/ | ||
| + | |||
| + | packadd! matchit | ||
| + | |||
| + | colorscheme slate | ||
| + | " | ||
| + | " | ||
| + | filetype plugin indent on | ||
| + | syntax on | ||
| + | |||
| + | highlight Normal cterm=NONE ctermbg=NONE ctermfg=NONE gui=NONE guibg=NONE guifg=NONE | ||
| + | |||
| + | "set autoindent | ||
| + | set backspace=indent, | ||
| + | set encoding=utf-8 | ||
| + | set fileformats=unix, | ||
| + | set hlsearch | ||
| + | set ignorecase | ||
| + | set incsearch | ||
| + | "set list | ||
| + | "set listchars=eol: | ||
| + | set mouse= | ||
| + | set number | ||
| + | set relativenumber | ||
| + | set ruler | ||
| + | set scrolloff=5 | ||
| + | set shiftwidth=0 | ||
| + | set showcmd | ||
| + | set showmatch | ||
| + | set showmode | ||
| + | set signcolumn=number | ||
| + | set smartcase | ||
| + | "set smartindent | ||
| + | set smarttab | ||
| + | set smoothscroll | ||
| + | set softtabstop=-1 | ||
| + | set tabstop=4 | ||
| + | set timeout | ||
| + | set ttimeout | ||
| + | set ttimeoutlen=-1 | ||
| + | set ttymouse= | ||
| + | set wildmenu | ||
| + | |||
| + | set secure | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== allgemeines ===== | ||
| + | |||
| + | den " | ||
| + | > aptitude -y install vim | ||
| + | |||
| + | [[https:// | ||
| + | > vimtutor de | ||
| + | |||
| + | [[https:// | ||
| + | > vimtutor en | ||
| + | |||
| + | anständige Farben und guter Kontrast bei weißem und schwarzem Hintergrund + [[https:// | ||
| + | # echo -e ": | ||
| + | |||
| + | oder in Kurzform für das Home-Verzeichnis so [[https:// | ||
| + | # echo -e ": | ||
| + | oder | ||
| + | # echo -e ": | ||
| + | |||
| + | schaltet im vim die Zeilennummerierung an: | ||
| + | :set nu | ||
| + | |||
| + | schaltet im vim die Zeilennummerierung aus: | ||
| + | :set nonu | ||
| + | |||
| + | zeigt im vim die Zeilenumbrüche an: | ||
| + | :set list | ||
| + | |||
| + | |||
| + | ==== Encoding ==== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | um eine Datei mit dem VI in einem neuen Encoding zu speichern, muss das neue Encoding dem Schreibkommando übergeben werden: | ||
| + | > vi datei.txt | ||
| + | ... | ||
| + | :write ++enc=utf-8 datei.txt | ||
| + | |||
| + | Das Encoding bei Start von '' | ||
| + | # most shells on *nix / pwsh on windows | ||
| + | vim --cmd 'set encoding=utf-8' | ||
| + | |||
| + | Es gibt einen Unterschied zwischen "'': | ||
| + | |||
| + | **'' | ||
| + | Legt die in Vim verwendete Zeichencodierung fest. Es gilt für Text in den Puffern, Registern, Strings in Ausdrücken, | ||
| + | Das Ändern dieser Option wird die Kodierung des bestehenden Textes in Vim nicht ändern. Es kann dazu führen, dass Nicht-ASCII-Text ungültig wird. Es sollte normalerweise auf seinem Standardwert gehalten oder beim Start von Vim gesetzt werden. | ||
| + | Normalerweise entspricht ' | ||
| + | |||
| + | **'' | ||
| + | Legt die Zeichencodierung für die Datei dieses Puffers fest. Wenn sich „fileencoding“ von „encoding“ unterscheidet, | ||
| + | Wenn ' | ||
| + | __WARNUNG: | ||
| + | Konvertierung kann zu Informationsverlust führen! Wenn „Kodierung“ „utf-8“ oder eine andere Unicode-Kodierung ist, erfolgt die Konvertierung höchstwahrscheinlich so, dass die umgekehrte Konvertierung denselben Text ergibt. Wenn die ' | ||
| + | |||
| + | |||
| + | ==== Byte Order Mark (BOM) ==== | ||
| + | |||
| + | setzen: | ||
| + | :set bomb | ||
| + | |||
| + | entfernen: | ||
| + | :set nobomb | ||
| + | |||
| + | * Wenn eine Datei geschrieben wird und die folgenden Bedingungen erfüllt sind, wird der Datei eine BOM (Byte Order Mark) vorangestellt: | ||
| + | * diese Option ist an | ||
| + | * die Option ' | ||
| + | * '' | ||
| + | Einige Anwendungen verwenden das BOM, um die Codierung der Datei zu erkennen. | ||
| + | Wird häufig für UCS-2-Dateien unter MS-Windows verwendet. | ||
| + | Bei anderen Anwendungen verursacht es Probleme, zum Beispiel: | ||
| + | "'' | ||
| + | Gcc akzeptiert keinen BOM. Wenn Vim eine Datei liest und '' | ||
| + | |||
| + | |||
| + | ===== die 16 wichtigsten vim-Kommandos ===== | ||
| + | |||
| + | < | ||
| + | [Esc] - in den Befehls-Modus wechseln | ||
| + | i - links vom Cursor in den Einfüge-Modus wechseln | ||
| + | I - links von der Zeile in den Einfüge-Modus wechseln | ||
| + | o - unter dem Cursor eine neue Zeile im Einfüge-Modus öffnen | ||
| + | O - über dem Cursor eine neue Zeile im Einfüge-Modus öffnen | ||
| + | a - rechts vom Cursor in den Einfüge-Modus wechseln | ||
| + | A - rechts von der Zeile in den Einfüge-Modus wechseln | ||
| + | s - das Zeichen, auf dem der Cursor steht, enfernen und genau an der Stelle in den Einfüge-Modus wechseln | ||
| + | S - die Zeile, auf dem der Cursor steht, leeren und in den Einfüge-Modus wechseln | ||
| + | . - wiederholt den letzten Befehl -> im nvi anders | ||
| + | u - macht die letzten Befehle rückgängig (Undo) -> im nvi anders | ||
| + | [Strg]+[R] | ||
| + | x - löscht das Zeichen, auf dem der Cursor steht | ||
| + | dd - löscht die ganze Zeile (und fügt es in den Puffer ein) | ||
| + | yy - fügt die Zeile, in der der Cursor steht, in den Puffer ein | ||
| + | p - fügt den Inhalt aus dem Puffer in der Datei ein | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== weitere vim-Kommandos ==== | ||
| + | |||
| + | < | ||
| + | cw - überschreibt das aktuell ausgewählte Wort | ||
| + | w - springt ein Wort anhand der Worttrenner weiter | ||
| + | z.B.: Ob beispielsweise mehr als nur " | ||
| + | kann beispielsweise an Hand einer IP-Adresse (127.0.0.1) getestet werden. | ||
| + | Ursprünglich wurden Wörter nur durch Leerzeichen/ | ||
| + | in dem Fall wäre die komplette IP-Adresse ein Wort, in vielen neueren Shells wird eine | ||
| + | IP-Adresse aber als 7 Worte angesehen => " | ||
| + | G - Springt zum Dateiende | ||
| + | [Zahl]G | ||
| + | dG - löscht den gesamten Bereich unterhalb des Cursors | ||
| + | d1G - löscht den gesamten Bereich oberhalb des Cursors | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== mit vim mehrere Dateien gleichzeitig öffnen ==== | ||
| + | |||
| + | > vim datei_1.txt datei_2.txt datei_3.txt | ||
| + | < | ||
| + | :n - zur nächsten Datei wechseln | ||
| + | :N - zurück zur vorhergehenden Datei wechseln | ||
| + | :e# - zum Anfang zurück bzw. zur 1. Datei wechseln | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== ein Vim-Fork ===== | ||
| + | |||
| + | [[https:// | ||
| + | 1976: Bill Joy schrieb den " | ||
| + | 1991: Bram Moolenaar schrieb " | ||
| + | 2014 kam " | ||
| + | siehe auch " | ||
| + | |||
