Technické
Netechnické
- Jídlo a pití
"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
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
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
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".
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..
seznam formátů:
:set ffs?
zobrazení/nastavení formátu:
:set ff? :set ff=unix
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).