Vim подсетник
Режими:
Vi има два основна режима рада: унос и нормални (командни) режим. Покреће се у нормалном режиму, у коме померате курсор, бришете и копирате текст. Команде за унос и измену укључују режим уноса. Escape враћа у нормални режим, из кога можете изаћи, на пример командом :q!. Већина команди извршава се одмах по уносу; команде које почињу двотачком извршавају се после Enter-а.
Излазак:
:wq |
Сачувати измене и изаћи |
:q |
Изаћи ако нема несачуваних измена |
ZZ |
Сачувати измењену датотеку и изаћи |
:q! |
Изаћи без чувања измена |
Унос текста:
i |
Унети испред курсора |
I |
Унети испред првог знака у реду који није размак |
a |
Додати после курсора |
A |
Додати на крају реда |
o |
Отворити нови ред испод текућег |
O |
Отворити нови ред изнад текућег |
r |
Заменити један знак |
R |
Укључити режим замене |
Кретање:
h |
Померити се улево |
j |
Померити се надоле |
k |
Померити се нагоре |
l |
Померити се удесно |
w |
На следећу реч |
W |
На следећу реч ограничену белинама |
b |
Назад на почетак речи |
B |
Назад на почетак речи ограничене белинама |
e |
На крај речи |
E |
На крај речи ограничене белинама |
( |
Једну реченицу уназад |
) |
Једну реченицу унапред |
{ |
Један пасус уназад |
} |
Један пасус унапред |
0 |
На почетак реда |
$ |
На крај реда |
1G |
На први ред датотеке |
G |
На последњи ред датотеке |
nG |
На ред n датотеке |
:n |
На ред n датотеке |
fc |
Унапред до знака c |
Fc |
Уназад до знака c |
H |
На врх екрана |
M |
На средину екрана |
L |
На дно екрана |
% |
На одговарајућу заграду: ( ), { }, [ ] |
Брисање текста:
Већина команди за брисање састоји се од d и команде кретања. На пример, dw брише реч. Остале команде за брисање:
x |
Обрисати знак под курсором |
X |
Обрисати знак испред курсора |
D |
Обрисати до краја реда |
dd |
Обрисати текући ред |
:d |
Обрисати текући ред |
Копирање текста у регистар:
Као и команде за брисање, већина команди за копирање састоји се од y и команде кретања. На пример, y$ копира у регистар текст до краја реда. Још две команде за копирање:
yy |
Копирати текући ред |
:y |
Копирати текући ред |
Измена текста:
Команде за измену бришу текст и укључују режим уноса. Састоје се од c и команде кретања. На пример, cw мења реч. Остале команде за измену:
C |
Изменити до краја реда |
cc |
Изменити цео ред |
Уметање текста из регистра:
p |
Уметнути после курсора или испод реда |
P |
Уметнути испред курсора или изнад реда |
Регистри:
Пре команде за брисање, измену, копирање или уметање можете навести именовани регистар. Префикс је "c, где је c мало латинично слово. На пример, "adw брише реч у регистар a. Команда "ap враћа је у текст.
Ознаке:
У датотеци можете поставити именоване ознаке. Мала латинична слова означавају локалне ознаке. Ознаке могу задавати и границе опсега.
mc |
Поставити ознаку c. |
`c |
Прећи на тачан положај ознаке c. |
'c |
Прећи на први знак који није размак у реду са ознаком c. |
Претрага:
/ниска |
Тражити унапред ниску |
?ниска |
Тражити уназад ниску |
n |
Поновити претрагу у истом смеру за ниску |
N |
Поновити претрагу у супротном смеру за ниску |
Замена:
За претрагу и замену користи се :s, обично уз опсег или команду :g (види испод).
:s/образац/ниска/заставице |
Заменити образац са ниском у складу са заставицама. |
g |
Заменити сва поклапања у сваком реду. |
c |
Тражити потврду за сваку замену. |
& |
Поновити последњу команду :s. |
Регуларни изрази:
. (тачка) |
Било који знак осим новог реда. |
* |
Нула или више понављања претходног елемента. |
[...] |
Један знак из скупа. |
[^...] |
Један знак ван скупа. |
^ |
Почетак реда. |
$ |
Крај реда. |
< |
Почетак речи. |
> |
Крај речи. |
(…) |
Група за повезивање делова израза. |
n |
Садржај групе n. |
[...] примери скупова знакова:
[A-Z] |
Велика слова од A до Z. |
[a-z] |
Мала слова од a до z. |
[0-9] |
Цифре од 0 до 9. |
[./=+] |
Скуп који садржи . (тачку), / (косу црту), = и +. |
[-A-F] |
Велика слова од A до F и цртица; цртицу ставите прву. |
[0-9 A-Z] |
Сва велика слова, цифре и размак. |
[A-Z][a-zA-Z] |
Први положај садржи велико слово од A до Z. Други положај садржи било које латинично слово. |
Примери регуларних израза:
/Hello/ |
Ред који садржи Hello. |
/^TEST$/ |
Ред који садржи само TEST. |
/^[a-zA-Z]/ |
Ред који почиње латиничним словом. |
/^[a-z].*/ |
Ред који почиње словом a-z, иза кога следи нула или више знакова. |
/2134$/ |
Ред који се завршава са 2134. |
/\(21\|35\)/ |
Ред који садржи 21 или 35. Екраниране заграде групишу алтернативе; екранирана усправна црта значи „или“ у подразумеваном синтаксису Vim-а. |
/[0-9]*/ |
Нула или више цифара. |
/^[^#]/ |
Ред чији први знак није #. |
Напомене:
1. Регуларни изрази подразумевано разликују велика и мала слова. 2. Користе се свуда где је потребан образац: pattern.
Бројачи:
Број испред команде задаје број понављања. На пример, 5dw брише пет речи, а 3fe помера на трећу следећу појаву слова e. Тако можете понављати чак и унос, на пример унети исти текст 100 пута.
Опсези:
Испред многих команди са двотачком можете навести опсег редова. На пример, :3,7d брише редове од 3 до 7. Комбинујте опсеге са :s за замену у више редова; :.,$s/образац/ниска/g врши замену од текућег реда до краја датотеке.
:n,m |
Редови n-m |
:. |
Текући ред. |
:$ |
Последњи ред. |
:'c |
Ознака c |
:% |
Сви редови датотеке. |
:g/образац/ |
Сви редови који садрже образац. |
Датотеке
:w датотека |
Уписати у датотеку. |
:r датотека |
Прочитати из датотеке. |
:n |
Прећи на следећу датотеку. |
:prev |
Прећи на претходну датотеку. |
:e датотека |
Уређивати датотеку |
!!програм |
Заменити ред излазом програма програм. |
Остале команде
~ |
Променити величину слова. |
J |
Спојити редове. |
. |
Поновити последњу измену текста. |
u |
Поништити последњу измену. |
U |
Поништити све измене у реду. |
Увод
У претходном прегледу први пут смо се сусрели са режимима. Сада ћемо их детаљније проучити и видети шта можемо да радимо у сваком од њих.
Врсте режима
Vim има три главна режима уређивања:
- Нормални режим служи за извршавање команди. У њему се Vim покреће.
- Режим уноса служи за куцање текста.
- Визуелни режим служи за означавање дела текста над којим ће се извршити команда или операција.
Нормални режим и помоћ
На почетку сте у нормалном режиму. Унесите :echo "hello world" и притисните Enter. Појавиће се познате речи „hello world“: извршили сте команду :echo и проследили јој текст за приказ. Затим унесите /hello и притисните Enter. Vim ће пронаћи следећу појаву тог текста и померити курсор на њу.
То су само два примера команди нормалног режима; многе друге тек треба истражити. Умеће коришћења :help скоро је подједнако важно као разумевање самих режима. Не морате памтити све команде Vim-а, већ знати где да пронађете потребну.
:help usr_toc отвара садржај корисничког приручника. :help index отвара индекс команди, у коме можете тражити тему, на пример помоћу /insert mode. Ако заборавите оба назива, притисните F1 или извршите :help.
Унос и уметање текста
Vim се покреће у нормалном режиму, а i укључује режим уноса. Испробајмо ову команду и друге начине уноса:
- Извршите
:e dapping.txt. - Притисните
i. - Унесите следећи текст, укључујући пропусте које ћемо касније исправити:
means being determined about being determined and being passionate about being passionate. - Притисните Escape да се вратите у нормални режим.
- Извршите
:w.
На почетку недостаје реч, а курсор је на крају. Како да се вратимо и допишемо је? Можемо користити миш, притискати стрелице или притиснути Home па i. Директније је притиснути I, велико слово i:
- Притисните
I. - Унесите
Dappin. - Притисните Escape.
Ова команда прво помера курсор на први знак у реду који није размак, па укључује унос. Навикните се да се вратите у нормални режим чим завршите куцање. После првог писања, велики део посла чине преписивање, уређивање и дотеривање, за шта је овај режим користан.
Команда i уноси текст испред знака под курсором. За унос после њега користите a, од енглеског “after”:
- Притисните
a. - Унесите
g, са размаком, да довршите “Dapping” и одвојите га од “means”. - Притисните Escape.
Као што I проширује дејство i, тако A проширује a преласком на крај реда:
- Притисните
A. - Унесите
.да завршите реченицу. - Притисните Escape.
| Команда | Радња |
|---|---|
i |
Унети испред курсора |
I |
Унети испред првог знака у реду који није размак |
a |
Додати после курсора |
A |
Додати на крају реда |
Велика слова обухватају већи део реда. Сада умемо брзо да радимо у једном реду; следе нови редови. Притисните o, од “open”, да отворите ред испод текућег и почнете унос:
- Притисните
o. - Унесите
I'm a rapper. - Притисните Escape.
Било би боље да нова реченица буде у засебном пасусу. Притисните O, велико слово o, па Escape: изнад реченице појавиће се празан ред.
| Команда | Радња |
|---|---|
o |
Отворити ред испод |
O |
Отворити ред изнад |
Овде велика и мала слова отварају редове у супротним смеровима.
Измена и замена текста
Постоји још једна грешка: требало је написати “dapper”, а не “rapper”. Како ефикасно променити један знак? Можемо поставити курсор на r, притиснути i, Delete, унети d, па притиснути Escape. Команда s, од “substitute”, скраћује поступак:
- Померите курсор на
r; са краја те речи командаbвраћа на њен почетак. - Притисните
s. - Унесите
d. - Притисните Escape.
Један уштеђен притисак делује безначајно, али се ове радње понављају целог дана. Брзо обављање једноставних операција оставља више пажње за креативне и занимљиве делове посла. Како каже Линус Торвалдс, брзина не омогућава само ранији завршетак: она мења начин рада.
Велико слово S замењује цео ред:
- Притисните
S. - Унесите
Be a sinner. - Притисните Escape.
| Команда | Радња |
|---|---|
s |
Обрисати текући знак и укључити унос |
S |
Заменити текући ред |
Може ли замена једног знака бити још једноставнија? Може, командом r, од “replace”. Пређите на прво слово речи sinner, притисните r, па d. Добићете dinner. И даље сте у нормалном режиму, па Escape није потребан.
Велико слово R замењује узастопне знакове:
- Поставите курсор на
iу речиdinner. - Притисните
R. - Унесите
app; реч постајеdapper. - Притисните Escape.
| Команда | Радња |
|---|---|
r |
Заменити један знак |
R |
Замењивати узастопне знакове |
Текст сада треба да изгледа овако:
Dapping means being determined about being determined and being passionate about being passionate.
Be a dapper.
Градива има доста, али учење режима је најтежи први корак. Када њихово понашање постане познато, остале могућности Vim-а лакше се разумеју. Ако је пребацивање и даље незгодно, поновите примере и враћајте им се по потреби. За више детаља прочитајте :help inserting и :help replacing.
Визуелни режим
Претпоставимо да желите да означите неколико речи и замените их новим текстом. Можете кликнути на почетак, држати тастер миша и превући показивач до краја. Можете и брисати знакове један по један тастерима Delete или Backspace, али је то још више посла.
Ефикасније је поставити курсор на почетак, притиснути v за визуелни режим и прећи на крај стрелицама или командом кретања. На пример, 5e води на крај пете речи од курсора. Притисните c, од “change”, да замените означени текст. Ова команда укључује режим уноса; после новог текста притисните Escape.
Мало слово v означава знакове. За означавање целих редова користите велико V.
Пребацивање режима
Normal -- i,I,a,A,o,O,s,S,R --> Insert
Normal <------ Escape ------- Insert
| ^
v,V | Escape
v |
Visual
(r replaces one character without leaving Normal mode.)
Шема је нацртана у Vim-у помоћу додатка Dr. Chip's DrawIt. Опис режима је у :help vim-modes-intro, а прелаза између њих у :help mode-switching. Ако још нисте уверени да режими дају Vim-у снагу и једноставност, прочитајте чланке „Why Vi“ и „The Vi Input Model“, који детаљније објашњавају овај начин уређивања.
Додатна подсетница
~/.vimrc |
Датотека подешавања Vim-а |
:e scp://user@host/path/to/the/file.txt |
Уређивати удаљену датотеку; netrw подржава и ftp и ftps |
:Ex или :e ./ |
Отворити прегледач датотека |
hjkl |
Кретање у четири смера |
i |
Режим уноса |
I |
Унос испред првог знака у реду који није размак |
a |
Додавање после курсора |
A |
Додавање на крају реда |
o |
Отворити ред испод |
O |
Отворити ред изнад |
R |
Преписивати постојећи текст |
u, :undo |
Поништавање |
Ctrl-R, :redo |
Понављање поништене радње |
dd |
Исећи ред |
cc |
Обрисати ред и почети унос |
yy |
Копирати ред |
p |
Уметнути из регистра |
ndd |
Обрисати n редова |
nyy |
Копирати n редова |
Escape |
Вратити се у нормални режим |
Delete |
Обрисати знак под курсором |
:n |
Прећи на ред n |
% |
Прећи на одговарајућу заграду |
:e fname |
Уређивати датотеку |
:w [fname] |
Сачувати измене |
:wa |
Сачувати све измењене датотеке |
:q |
Изаћи из уређивача |
:q! |
Изаћи без чувања |
:colorscheme name |
Изабрати шему боја; у Vim-у 7.2 шеме су могле бити у /usr/local/share/vim/vim72/colors/*.vim |
:pwd |
Приказати текући директоријум |
:cd path |
Променити директоријум |
:!cmd |
Извршити спољну команду |
Ctrl-P, Ctrl-N |
Допуњавање текста у режиму уноса |
Ctrl-R, =, expr, Enter |
Уметнути резултат израза у режиму уноса, на пример 5*2-3 |
Истицање синтаксе
:syntax on |
Укључити истицање |
:syntax off |
Искључити истицање |
Преламање редова
:set wrap |
Укључити преламање при приказу |
:set nowrap |
Искључити преламање при приказу |
Штампање
:hardcopy |
Одштампати документ |
:set printoptions=duplex:off |
Искључити двострано штампање |
Склапање
zc |
Затворити склоп |
zo |
Отворити склоп |
zM |
Затворити све склопове |
zR |
Отворити све склопове |
za |
Променити стање склопа |
zf |
Направити ручни склоп |
:set foldenable |
Укључити склапање |
:set foldmethod=syntax |
Склапање по синтакси |
:set foldmethod=indent |
Склапање по увлачењу |
:set foldmethod=manual |
Означити део помоћу v и притиснути zf |
:set foldmethod=marker |
Склапање по ознакама у тексту |
:set foldmarker=begin,end |
Задати почетну и завршну ознаку |
Ознаке
ma |
Поставити локалну ознаку a |
mB |
Поставити глобалну ознаку B |
`c |
Прећи на тачан положај ознаке c |
`0 |
Вратити се на положај при последњем изласку из Vim-а |
:marks |
Приказати ознаке |
Регистри
"ayy |
Копирати ред у регистар a |
"bdd |
Исећи ред у регистар b |
"C3dd |
Исећи три реда и додати у регистар c |
:reg [names] |
Приказати садржај регистара |
Означавање
v, hjkl |
Означити текст |
V |
Означити редове |
Ctrl-V |
Означити правоугаони блок |
p |
Уметнути |
y |
Копирати |
d |
Обрисати |
gu |
Претворити текст у мала слова |
gU |
Претворити текст у велика слова |
Увлачење
[count]> |
Померити означени текст удесно |
[count]< |
Померити означени текст улево |
[count]>> |
Померити редове удесно |
[count]<< |
Померити редове улево |
:set tabstop=n |
Ширина табулатора у размацима |
:set shiftwidth=n |
Ширина корака увлачења |
:set expandtab / :set noexpandtab |
Да ли уносити размаке уместо табулатора |
Претрага и замена
/pattern |
Пронаћи образац |
n |
Следеће поклапање |
N |
Претходно поклапање |
:%s/foo/bar/gi |
Заменити све foo са bar без разликовања величине слова; детаљи: http://eax.me/regular-expr/ |
Бројеви редова
:set number |
Приказати бројеве редова |
:set nonumber |
Сакрити бројеве редова |
Картице
:tabnew [fname] |
Отворити нову картицу |
:tabs |
Приказати картице |
:tabn |
Следећа картица |
:tabp |
Претходна картица |
ngt |
Прећи на картицу n |
gt |
Следећа картица |
gT |
Претходна картица |
Прозори
:split |
Поделити водоравно |
:vsplit |
Поделити усправно |
Ctrl-W, c |
Затворити прозор |
Ctrl-W, = |
Изједначити величине прозора |
Ctrl-W, h/j/k/l |
Прећи између прозора; раде и стрелице |
Провера правописа
:setlocal spell spelllang=ru,en |
Укључити проверу руског и енглеског |
|
|
:set spell! |
Укључити или искључити проверу |
]s |
Следећа погрешно написана реч |
[s |
Претходна погрешно написана реч |
zg |
Додати реч у речник |
zw |
Означити реч као погрешну |
zG |
Прихватити реч за ову сесију |
Кодирања
:e ++enc=encoding |
Отворити датотеку у задатом кодирању |
:w ++enc=encoding |
Сачувати у новом кодирању |
:set fileencodings=utf-8,koi8-r |
Кодирања за препознавање по редоследу приоритета |
Остало
:set wildmenu / :set nowildmenu |
Приказивати могућности допуњавања командне линије |
:set list |
Приказивати табулаторе и крајеве редова |
q: |
Отворити историју команди |
. |
Поновити последњу измену |
То је за сада све. Планирам да повремено ажурирам ову подсетницу, па пратите PS на крају наредних објава.