VIM v kolečku

"To me, vi is Zen.

To use vi is to practice zen.

Every command is a koan.

Profound to the user,

unintelligible to the uninitiated.

You discover truth every time you use it."

–reddy@lion.austin.com

Spuštění

Klasické spuštění

vim

Spuštění s úpravou zadaného souboru

vim /cesta/k/souboru/soubor.txt

Úprava dva (a více souborů) s jejich rozložení do záložek

vim -p soubor1 soubor2

Spuštění příkazu ihned po startu

vim -c prikaz

To se dá například využít pro testování rychlosti nabíhání vimu příkazem

bash-3.2$ time vim -c q
real    0m0.037s
user    0m0.030s
sys     0m0.003s

bash-3.2$ # Archlinux, Vim 7.2.018, C2D2.4GHz@800MHz+5400rpm

Vtípky

vim -A # arabsky vim ;-)
vim -F # farsi mode o_O

Vim jako kalkulačka

Mějme číslo 'n' někde v textu. V normal mode pak funguje CTRL+a jako inkrementace a CTRL+x je dekrementace v případě, že se kurzor nachází nad číslem 'n'.

Vim umí {in/de}krementovat čísla decimální, hexadecimální a oktalová. V případě, že stojíme na čísle, které je ve tvaru 0x… tak se bude s číslem nakládat jako s šestnáctkovým, jestliže má na začátku nulu a ani jedna číslice není vyšší než sedm, pak se s číslem nakládá jako s osmičkovým. Jinak se s číslem nakládá jako s číslem desítkovým.

{In,De}krementaci lze provádět i na oboru znaků [a-z]. Tato vlastnost je však 'exklusivní nebo' s vlastní {in,de}krementace čísel. Je nutno přenastavit proměnou 'nrformats'. Pokud zadáme příkaz

:set nrformats

vypíše se nám aktuální nastavení, které pravděpodobně bude vypadat jako

nrformats=octal,hex

Pro změnu oboru na [a-z] zadejte

:set nrformats=alpha

Spojování řádek

Klávesa 'J' spojí řádku, na které se nachází kurzor s řádkou pod ní. Příkaz 'J' je 'ekvivalentní '2J' (což je nejmenší počet spojitelných řádků). Lze spojit více řádků násobením 'xJ'. Například '4J' spojí čtyři řádky (počítaje řádku, na které je kurzor). Příkaz 'J' je odvozen od anglického slova "join".

Šablony

Základ je mít ve $HOME/.vimrc něco jako

" Pri vytvareni noveho souboru se pouzije sablona
"autocmd BufNewFile *.[a-zA-Z0-9]\+ silent! 0read $HOME/.vim/empty.<amatch>:t:e
autocmd BufNewFile *.php    0read ~/.vim/pattern/php
autocmd BufNewFile *.html   0read ~/.vim/pattern/html
autocmd BufNewFile *.tex    0read ~/.vim/pattern/tex
autocmd BufNewFile *.sh     0read ~/.vim/pattern/sh
autocmd BufNewFile *.pl     0read ~/.vim/pattern/pl
autocmd BufNewFile *.c      0read ~/.vim/pattern/c
autocmd BufNewFile *.j      0read ~/.vim/pattern/j
autocmd BufNewFile Makefile 0read ~/.vim/pattern/makefile

(To se samozřejmě může lišit podle toho jak to kdo chce..)

A pak následují šablony:

$ ls ~/.vim/pattern/
c  html  j  makefile  php  pl  sh  tex
$ cat ~/.vim/pattern/html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
        <head>
                <meta http-equiv="content-type" content="text/html; charset=utf-8">
                <meta http-equiv="content-language" content="">
                <meta name="author" content="Martin 'dum8d0g' Kopta http://martin.kopta.eu/">
                <meta name="keywords" content="">
                <meta name="description" content="">
                <meta name="robots" content="ALL,FOLLOW">
                <meta name="cache" content="no-cache">
                <link rel="stylesheet" type="text/css" href="">
                <link rel="icon" type="image/x-icon" href="">
                <script type="text/javascript" src=""></script>
                <title></title>
        </head>
        <body>
                <div id="content">

                </div>
        </body>
</html>
$ cat ~/.vim/pattern/c
/* Martin 'dum8d0g' Kopta
 * date
 * sourcename.c
 * description
 */

/* Header: stdio
 * Reason: printf
 */
#include <stdio.h>

int main(int argc, char *argv[]){

        return (0);
}
$ cat ~/.vim/pattern/php
<?php

?>
$ cat ~/.vim/pattern/pl
#!/usr/bin/env perl
use 5.010;
use strict;
use warnings;
#use diagnostics;

$ cat ~/.vim/pattern/tex
%  
% 
% Martin 'dum8d0g' Kopta
% http://martin.kopta.eu
% email: martin@kopta.eu
% jabber martin@kopta.eu

\documentclass{article} 
%\documentclass[twocolumn]{article} 

% Pouzite balicky a nastaveni
\usepackage{czech}
\usepackage[utf8]{inputenc}
%\usepackage{amssymb, amsmath}
%\usepackage[]{graphicx}
%\usepackage[total={16cm,25cm}, top=3cm, left=2cm, bottom=2cm, includefoot]{geom
etry}

% Velikost pisma 12pt a odradkovani 15pt
%\fontsize{10pt}{13pt}
%\selectfont

% Informace o dokumentu
%\title{}
%\author{}
%\date{}

% Dokument
\begin{document} 

% Celni stranka
%\begin{titlepage}
%\maketitle
%\thispagestyle{empty}
%\end{titlepage}

%\section{} 

\end{document} 
% Konec 

$ cat ~/.vim/pattern/makefile 
# Gnuplot
SOURCE = main.plot
all: show

show:
        gnuplot $(SOURCE)

# Graphviz
SOURCE = main.dot
OUTPUT = output.png
TYPE   = png
all: show

show: makepng
        feh $(OUTPUT)

makepng:
        dot -T$(TYPE) < $(SOURCE) > $(OUTPUT)

clean:
        rm -f OUTPUT


# LaTeX
all: show

show: pdf
        xpdf main.pdf

pdf: main.tex
        pdfcslatex main.tex

clean:
        rm -f main.aux main.log main.pdf

# Jasmin
all: build run

build: main.j
        jasmin main.j

run: Main.class
        java Main

# C
CC     = gcc
CFLAGS = -Wall -pedantic
CLIBS  = -lrt -lpthread
now    = main
nowpar = 

all: clean build run

build: $(now)

main: main.c
        $(CC) $(CFLAGS) $(CLIBS) -o main main.c

run:
        xterm -e "./$(now) $(nowpar);echo;echo ==KONEC==;read"

clean:
        clear
        rm -f $(now)
$ cat ~/.vim/pattern/sh 
#!/usr/bin/env bash

Samozřejmě lze libovolně rozšiřovat a modifikovat..

Odsazování

  • '»' odsadí o jeden shiftwidth (:set shiftwidth=8) vpravo
  • '«' to samé vlevo
  • '^t' odsadí o jeden shiftwidth vpravo v insert modu
  • '^d' odsadí o jeden shiftwidth vlevo v insert modu
  • 'gq' preformatuje aktualni odstavec

Formáty

Konce řádek

seznam formátů:

:set ffs?

zobrazení/nastavení formátu:

:set ff?
:set ff=unix

Vi režim

Aplikace, které využívají readline (tj python, psql, spousta různých CLI programů, ..) mohou využívat vi mód.

$ cat ~/.inputrc
set editing-mode vi

Speciálně bash lze přepnou do vylepšeného vi módu (esc, v – skok do editoru)

set -o vi

V případě použití výchozího emacs módu (jinak set -o emacs) lze při psaní dlouhého příkazu skočit do $VISUAL (buď vim nebo něco jiného systémového) pomocí zkratky ^e^x (ctrl+e, ctrl+x).

/home/dum8d0g/www/martin.kopta.eu/trash/wiki/data/pages/software/vim/vim_v_kolecku.txt · Poslední úprava: 2009/07/05 12:26 (upraveno mimo DokuWiki)
CC Attribution 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0