dimabagow

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 има три главна режима уређивања:

Нормални режим и помоћ

На почетку сте у нормалном режиму. Унесите :echo "hello world" и притисните Enter. Појавиће се познате речи „hello world“: извршили сте команду :echo и проследили јој текст за приказ. Затим унесите /hello и притисните Enter. Vim ће пронаћи следећу појаву тог текста и померити курсор на њу.

То су само два примера команди нормалног режима; многе друге тек треба истражити. Умеће коришћења :help скоро је подједнако важно као разумевање самих режима. Не морате памтити све команде Vim-а, већ знати где да пронађете потребну.

:help usr_toc отвара садржај корисничког приручника. :help index отвара индекс команди, у коме можете тражити тему, на пример помоћу /insert mode. Ако заборавите оба назива, притисните F1 или извршите :help.

Унос и уметање текста

Vim се покреће у нормалном режиму, а i укључује режим уноса. Испробајмо ову команду и друге начине уноса:

  1. Извршите :e dapping.txt.
  2. Притисните i.
  3. Унесите следећи текст, укључујући пропусте које ћемо касније исправити: means being determined about being determined and being passionate about being passionate.
  4. Притисните Escape да се вратите у нормални режим.
  5. Извршите :w.

На почетку недостаје реч, а курсор је на крају. Како да се вратимо и допишемо је? Можемо користити миш, притискати стрелице или притиснути Home па i. Директније је притиснути I, велико слово i:

  1. Притисните I.
  2. Унесите Dappin.
  3. Притисните Escape.

Ова команда прво помера курсор на први знак у реду који није размак, па укључује унос. Навикните се да се вратите у нормални режим чим завршите куцање. После првог писања, велики део посла чине преписивање, уређивање и дотеривање, за шта је овај режим користан.

Команда i уноси текст испред знака под курсором. За унос после њега користите a, од енглеског “after”:

  1. Притисните a.
  2. Унесите g, са размаком, да довршите “Dapping” и одвојите га од “means”.
  3. Притисните Escape.

Као што I проширује дејство i, тако A проширује a преласком на крај реда:

  1. Притисните A.
  2. Унесите . да завршите реченицу.
  3. Притисните Escape.
Команда Радња
i Унети испред курсора
I Унети испред првог знака у реду који није размак
a Додати после курсора
A Додати на крају реда

Велика слова обухватају већи део реда. Сада умемо брзо да радимо у једном реду; следе нови редови. Притисните o, од “open”, да отворите ред испод текућег и почнете унос:

  1. Притисните o.
  2. Унесите I'm a rapper.
  3. Притисните Escape.

Било би боље да нова реченица буде у засебном пасусу. Притисните O, велико слово o, па Escape: изнад реченице појавиће се празан ред.

Команда Радња
o Отворити ред испод
O Отворити ред изнад

Овде велика и мала слова отварају редове у супротним смеровима.

Измена и замена текста

Постоји још једна грешка: требало је написати “dapper”, а не “rapper”. Како ефикасно променити један знак? Можемо поставити курсор на r, притиснути i, Delete, унети d, па притиснути Escape. Команда s, од “substitute”, скраћује поступак:

  1. Померите курсор на r; са краја те речи команда b враћа на њен почетак.
  2. Притисните s.
  3. Унесите d.
  4. Притисните Escape.

Један уштеђен притисак делује безначајно, али се ове радње понављају целог дана. Брзо обављање једноставних операција оставља више пажње за креативне и занимљиве делове посла. Како каже Линус Торвалдс, брзина не омогућава само ранији завршетак: она мења начин рада.

Велико слово S замењује цео ред:

  1. Притисните S.
  2. Унесите Be a sinner.
  3. Притисните Escape.
Команда Радња
s Обрисати текући знак и укључити унос
S Заменити текући ред

Може ли замена једног знака бити још једноставнија? Може, командом r, од “replace”. Пређите на прво слово речи sinner, притисните r, па d. Добићете dinner. И даље сте у нормалном режиму, па Escape није потребан.

Велико слово R замењује узастопне знакове:

  1. Поставите курсор на i у речи dinner.
  2. Притисните R.
  3. Унесите app; реч постаје dapper.
  4. Притисните 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 Укључити проверу руског и енглеског
mkdir -p ~/.vim/spell
cd ~/.vim/spell
wget https://ftp.vim.org/vim/runtime/spell/ru.koi8-r.sug
wget https://ftp.vim.org/vim/runtime/spell/ru.koi8-r.spl
wget https://ftp.vim.org/vim/runtime/spell/en.ascii.sug
wget https://ftp.vim.org/vim/runtime/spell/en.ascii.spl
: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 на крају наредних објава.

Vim