1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
# Добродошли у MNV приручник
# ДРУГО ПОГЛАВЉЕ
Ево змајева: ако је ово ваш први додир са програмом mnv и намеравали
сте да уроните у уводно поглавље, молимо вас да на командној линији
MNV едитора откуцате
~~~ cmd
:Tutor mnv-01-beginner
~~~
или само отворите [прво поглавље](@tutor:mnv-01-beginner) приручника на линку.
Приближно време потребно за успешан завршетак овог поглавља је
између 8 и 10 минута, у зависности од времена потрошеног на
експериментисање.
# Лекција 2.1.1: ИМЕНОВАНИ РЕГИСТРИ
** Сачувајте истовремено две тргнуте речи, па их налепите **
1. Померите курсор на линију испод обележену са ✓
2. Поставите се на било које слово речи ’Пера’ и откуцајте `"ayiw`{normal}
**ПАМЋЕЊЕ** *у регистар(”) (а) (y)ank [тргни] (i)nner [унутрашњу] (w)ord [реч]*
3. Поставите се унапред на реч ’колачића’ (`fk`{normal} или `$B`{normal}
или `/ко`{normal} `<ЕНТЕР>`{normal}) и откуцајте `"byiw`{normal}
4. Поставите се на било које слово речи ’Жика’ и откуцајте `ciw<CTRL-r>a<ESC>`{normal}
**ПАМЋЕЊЕ**: *(c)hange [измени] (i)nner [унутрашњу] (w)ord [реч] са <садржајем
(r)егистра> (a)*
5. Поставите се на било које слово речи ’торте’ и откуцајте `ciw<CTRL-r>b<ESC>`{normal}
а) Од сада ће Пера бити задужен за следовања колачића
б) У том смислу, Жика ће самостално одлучивати о судбини торте
НАПОМЕНА: У регистре може и да се брише, нпр. `"sdiw`{normal} ће обрисати
реч под курсором у регистар s.
РЕФЕРЕНЦЕ: [Регистри](registers)
[Именовани регистри](quotea)
[Покрети](text-objects)
[CTRL-R](i_CTRL-R)
# Лекција 2.1.2: РЕГИСТАР ИЗРАЗА
** Умећите резултате израчунавања „у лету” **
1. Померите курсор на линију испод обележену са ✗
2. Поставите се на било коју цифру броја у њој
3. Откуцајте `ciw<CTRL-r>=`{normal}60\*60\*24 `<ЕНТЕР>`{normal}
4. У наредној линији, пређите у режим уметање и додајте данашњи датум
помоћу `<CTRL-r>=`{normal}`system('date')`{mnv} `<ЕНТЕР>`{normal}
НАПОМЕНА: Сви позиви оперативном систему зависе од система на којем се
извршавају, нпр. на Windows употребите `system('date /t’)`{mnv} или
`:r!date /t`{mnv}
Заборавио сам колико секунди има у дану, 84600 је л’ да?
Данас је:
НАПОМЕНА: исто може да се постигне са `:pu=`{normal}`system('date')`{mnv}
или, са мање притисака на тастере `:r!date`{mnv}
РЕФЕРЕНЦА: [Регистар израза](quote=)
# Лекција 2.1.3: БРОЈЧАНИ РЕГИСТРИ
** Притискајте `yy`{normal} и `dd`{normal} и уочите ефекат који имају на регистре **
1. Померите курсор на линију испод обележену са ✓
2. тргните нулту линију, па затим погледајте садржаје регистара са
`:reg`{mnv} `<ЕНТЕР>`{normal}
3. обришите линију 0. са `"cdd`{normal}, па затим погледајте садржаје регистара
(где очекујете да видите линију 0?)
4. наставите да бришете сваку наредну линију, посматрајући успут регистре `:reg`{mnv}
НАПОМЕНА: требало би да приметите како се брисања целих линија померају низ
листу након додавања нових обрисаних линија
5. Сада (p)aste [налепите] следеће регистре у редоследу:
c, 7, 4, 8, 2. тј. са `"7p`{normal}
0. Ово
9. лелујаво
8. тајна
7. је
6. на
5. оси
4. једна
3. ратна
2. порука
1. поштовања
НАПОМЕНА: брисања комплетних линија (`dd`{normal}) много дуже остају у бројчаним
регистрима у односу на тргања целих линија или брисања која
користе мање покрете
РЕФЕРЕНЦА: [Бројчани регистри](quote0)
# Лекција 2.1.4: ЛЕПОТА МАРКЕРА
** Избегавање аритметике код неискусних програмера **
НАПОМЕНА: уобичајен проблем приликом писања кода је премештање великих
делова кода. Следећа техника помаже да се спречи потреба за
израчунавањима броја линије који је потребан у операцијама као што
су `"a147d`{normal} или `:945,1091d a`{mnv} или још горе, првобитном употребом
`i<CTRL-r>=`{normal}1091-945 `<ЕНТЕР>`{normal}
1. Померите курсор на линију испод обележену са ✓
2. Пређите на прву линију функције и маркирајте је са `ma`{normal}
НАПОМЕНА: тачна позиција унутар линије НИЈЕ битна!
3. Померите се на крај линије и онда на крај блока кода са `$%`{normal}
4. Обришите блок у регистар са `"ad'a`{normal}
**ПАМЋЕЊЕ**: *у регистар(") (a) постави (d)eletion [брисање] од курсора до
ЛИНИЈЕ која садржи маркер(') (a)*
5. Налепите блок између BBB и CCC са `"ap`{normal}
НАПОМЕНА: вежбајте више пута ову операцију да би вам постала природна `ma$%"ad'a`{normal}
~~~ cmd
AAA
function itGotRealBigRealFast() {
if ( somethingIsTrue ) {
doIt()
}
// таксономија наше функције се изменила па више нема
// азбучног смисла на својој тренутној позицији
// замислите стотине линија кода
// наивно бисте се померили на почетак и крај и записали или
// запамтили оба броја линије
}
BBB
CCC
~~~
НАПОМЕНА: маркери и регистри не деле простор имена, тако да је регистар а
потпуно независан од маркера а. Ово није случај са регистрима и
макроима.
РЕФЕРЕНЦЕ: [Маркери](marks)
[Покрети маркера](mark-motions) (разлика између ' и \`)
# РЕЗИМЕ лекције 2.1
1. Да сачувате (тргнете, обришете) текст у, и вратите (налепите) из, укупно
26 регистара (a-z)
2. Тргните целу реч са било које позиције унутар речи: `yiw`{normal}
3. Измените целу реч са било које позиције унутар речи: `ciw`{normal}
4. Уметните текст директно из регистра у режиму уметање: `<CTRL-r>a`{normal}
5. Уметните резултате простих аритметичких операција:
`<CTRL-r>=`{normal}60\*60 `<ЕНТЕР>`{normal} у режиму уметања
6. Уметните резултате системских позива:
`<CTRL-r>=`{normal}`system('ls -1')`{mnv} у режиму уметања
7. Погледајте садржај регистара са `:reg`{mnv}
8. Научите крајње одредиште брисања комплетних линија: `dd`{normal} у
бројчане регистре, тј. опадајући од регистра 1 - 9. Имајте на уму да
се брисања целих линија одржавају у регистрима дуже од било које друге
операције
9. Научите крајња одредишта свих тргања у бројчане регистре и колико се
тамо задржавају
10. Постављајте маркере из командног режима `m[a-zA-Z0-9]`{normal}
11. Премештајте по линијама на маркер са `'`{normal}
# ЗАКЉУЧАК
Овим се завршава друго поглавље MNV приручника. Још увек се ради на њему.
Ово поглавље је написао Пол Д. Паркер.
Изменио за mnv-tutor-режим Restorer
Превео на српски Иван Пешић.
|