about summary refs log tree commit diff stats
path: root/tools/vim.html
blob: 131b672c76b022a6719b31f568b22b458a9ae61d (plain) (blame)
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
<!DOCTYPE html>
<html dir="ltr" lang="en">
    <head>
        <meta charset='utf-8'>
        <title>Vim</title>
    </head>
    <body>

        <a href="index.html">Tools Index</a>
        <h1 id="vim">Vim</h1>

        <p>&lt;leader&gt; with default configuration is key \, so when
        you see &lt;leader&gt;-W means pressing \W</p>

        <h2 id="vimrc">1. Vim RC</h2>

        <p>Read
        <a href="http://dougblack.io/words/a-good-vimrc.htm">"A good vimrc"</a>
        for more information.</p>

        <dl>
            <dt>/usr/share/vim/vimrc</dt>
            <dd>System wide Vim initializations.</dd>
            <dt>~/.vimrc</dt>
            <dd>Your personal Vim initializations.</dd>
        </dl>

        <p>Copy <a href="conf/etc/skel/.vimrc">/etc/skel/.vimrc</a> skeleton example, so that each user have a base to start
        personalizing it;</p>

        <pre>
        $ sudo cp ~/doc/conf/etc/skel/.vimrc /etc/skel/
        $ sudo mkdir /etc/skel/.vim
        $ sudo mkdir /etc/skel/.vim/swap
        $ sudo mkdir /etc/skel/.vim/views
        $ sudo mkdir /etc/skel/.vim/undodir
        $ sudo mkdir /etc/skel/.vim/backup
        $ wget -O wombat2mod.vim  http://www.vim.org/scripts/download_script.php?src_id=40
        $ mv wombat2mod.vim /usr/share/vim/colors/
        </pre>

        <h2 id="color">2. Color schemes</h2>

        <p>Default vimrc skeleton is configured to use wombat2mod,
        which is installed by adduser skeleton.</p>

        <h2 id="split">3. Split and Tab</h2>

        <p>Horizontal split;</p>
        <pre>
        :sp
        </pre>

        <p>Vertical split;</p>
        <pre>
        :vsp
        </pre>

        <p>Change horizontal to vertical</p>
        <pre>
        ctrl+w H
        </pre>

        <p>Change vertical to horizontal</p>
        <pre>
        ctrl+w J
        </pre>

        <p>Move between window splits;</p>

        <pre>
        ctrl+w (k,j,l,h)
        </pre>

        <h2 id="filebrowser">4. File browser</h2>

        <p>Use built in netrw to see directories and files;</p>

        <dl>
            <dt>:Explore</dt>
            <dd>Opens window with file browser.</dd>
            <dt>:Sex</dt>
            <dd>Open horizontal split with file browser.</dd>
            <dt>:Vex</dt>
            <dd>Open vertical split with file browser.</dd>
        </dl>

        <p>To find files, run vim at top level of project and then use find auto completion or *;</p>

        <pre>
        :find nameofdirectory + Tab
        :find nameofdir* + Tab
        </pre>

        <p>For file browsing there is also a option to use edit;</p>

        <pre>
        :edit nameofdirectory/
        </pre>

        <h2 id="edit">5. Editing files</h2>

        <p>Come from background;</p>

        <pre>
        $ fg
        </pre>

        <h3>Moving in vim</h3>

        <p>Moving page up and page down;</p>

        <dl>
            <dt>[Control][b]</dt>
            <dd>Move back one full screen</dd>
            <dt>[Control][f]</dt>
            <dd>Move forward one full screen</dd>
            <dt>[Control][d]</dt>
            <dd>Move forward 1/2 screen</dd>
            <dt>[Control][u]</dt>
            <dd>Move back (up) 1/2 screen</dd>
        </dl>

        <h3>How to use vim</h3>

        <p>In vim you can apply predefined number of times to a operator,
        selection or object. For example to delete the next
        two words press: d + 2 + w. List of important operators objects,
        selections;</p>

        <pre>
        operator + count + object
        </pre>

        <p>Operator;</p>

        <dl>
            <dt>d</dt>
            <dd>Delete</dd>
            <dt>c</dt>
            <dd>Change (d + i)</dd>
            <dt>y</dt>
            <dd>Copy</dd>
            <dt>v</dt>
            <dd>Visual Select</dd>
        </dl>

        <p>Objects;</p>
        <dl>
            <dt>w</dt>
            <dd>Word</dd>
            <dt>s</dt>
            <dd>Sentences</dd>
            <dt>p</dt>
            <dd>Paragraphs</dd>
            <dt>t</dt>
            <dd>Tags</dd>
        </dl>

        <p>Selections are like objects, for example d + i + w
        will delete "inner" word, c + a + w do the same plus
        the space;</p>

        <dl>
            <dt>a</dt>
            <dd>All</dd>
            <dt>i</dt>
            <dd>in</dd>
            <dt>t</dt>
            <dd>Until</dd>
            <dt>f</dt>
            <dd>Find forward</dd>
            <dt>F</dt>
            <dd>Find backward</dd>
        </dl>

        <p>Selection of useful combinations;</p>
        <dl>
            <dt>vat</dt>
            <dd>Select whole tag block.</dd>
            <dt>cit</dt>
            <dd>Change inside tag.</dd>
            <dt>yat</dt>
            <dd>Copy whole tag.</dd>
            <dt>vip<C-V>$A,<Esc></dt>
            <dd>Select a paragraph (vip), switch to visual
            block mode (CTRL V), append to all lines ($A) a
            comma (,), press esc to confirm.</dd>
            <dt>vip&lt;C-V&gt;I,&lt;Esc&gt;</dt>
            <dd>Select a paragraph (vip), switch to visual
            block mode (CTRL V), insert to all lines (I) a
            comma (,), press esc to confirm.</dd>
        </dl>

        <h2 id="ctags">6. Tags</h2>

        <p>Tags, at top level of project;</p>

        <pre>
        $ ctags -R .
        $ vim src/hello_world.c
        </pre>

        <p>To follow a tag;</p>

        <pre>
        Ctrl-]
        </pre>

        <p>To get back;</p>

        <pre>
        Ctrl-t
        </pre>

        <p>Autocomplete, press to see all options;</p>

        <pre>
        Ctrl-n
        </pre>

        <p>To move forward and backward in options;</p>

        <pre>
        Ctrl-n Ctrl-p
        </pre>

        <p>Show auto completion with references to only this file;</p>

        <pre>
        Ctrl-x Ctrl-n
        </pre>

        <p>Show auto completion with filenames, * Tab can be used;</p>

        <pre>
        Ctrl-x Ctrl-f
        </pre>

        <p>Show auto completion with only tags;</p>

        <pre>
        Ctrl-x Ctrl-]
        </pre>

        <h2 id="spellcheck">7. Spellcheck</h2>

        <p>Press z= over the bad written word and select desired one.</p>

        <h2 id="plugin">8. Plugins</h2>

        <h2 id="vimdiff">9. Vimdiff</h2>

	<p>If two files are open in <a href="#split">split</a> type :diffthis in both windows to get vimdiff of the files. To close type :diffoff.</p>

	<dl>
	<dt>do<dt>
	<dd> Get changes from other window into the current window.</dd>
	<dt>dp</dt>
	<dd>Put the changes from current window into the other window.</dd>
	<dt>]c</dt>
	<dd>Jump to the next change.</dd>
        <dt>[c</dt>
        <dd>Jump to the previous change.</dd>
        <dt>Ctrl W + Ctrl W</dt>
        <dd>Switch to the other split window.</dd>
	</dl>

        <a href="index.html">Tools Index</a>
        <p>This is part of the Hive System Documentation.
        Copyright (C) 2019
        Hive Team.
        See the file <a href="../fdl-1.3-standalone.html">Gnu Free Documentation License</a>
        for copying conditions.</p>

    </body>
</html>
span class="s">"LineNr">25 </span>] <span id="L26" class="LineNr">26 </span><span class="Comment"># store to default space: 10 + (skip refcount and length) 2 + (index) 1</span> <span id="L27" class="LineNr">27 </span><span class="traceContains">+mem: storing 23 in location 13</span> <span id="L28" class="LineNr">28 </span><span class="Comment"># store to chained space: (contents of location 12) 20 + (refcount and length) 2 + (index) 1</span> <span id="L29" class="LineNr">29 </span><span class="traceContains">+mem: storing 24 in location 23</span> <span id="L30" class="LineNr">30 </span> <span id="L31" class="LineNr">31 </span><span class="Comment">//: to support it, create another special variable called global space</span> <span id="L32" class="LineNr">32 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L99'>is_disqualified</a> Special-cases&quot;)</span> <span id="L33" class="LineNr">33 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;global-space&quot;</span><span class="Delimiter">)</span> <span id="L34" class="LineNr">34 </span> x<span class="Delimiter">.</span>initialized = <span class="Constant">true</span><span class="Delimiter">;</span> <span id="L35" class="LineNr">35 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L156'>is_special_name</a> Special-cases&quot;)</span> <span id="L36" class="LineNr">36 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;global-space&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span> <span id="L37" class="LineNr">37 </span> <span id="L38" class="LineNr">38 </span><span class="Comment">//: writes to this variable go to a field in the current routine</span> <span id="L39" class="LineNr">39 </span><span class="Delimiter">:(before &quot;End routine Fields&quot;)</span> <span id="L40" class="LineNr">40 </span><span class="Normal">int</span> global_space<span class="Delimiter">;</span> <span id="L41" class="LineNr">41 </span><span class="Delimiter">:(before &quot;End routine Constructor&quot;)</span> <span id="L42" class="LineNr">42 </span>global_space = <span class="Constant">0</span><span class="Delimiter">;</span> <span id="L43" class="LineNr">43 </span><span class="Delimiter">:(after &quot;Begin Preprocess write_memory(x, data)&quot;)</span> <span id="L44" class="LineNr">44 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;global-space&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L45" class="LineNr">45 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!scalar<span class="Delimiter">(</span>data<span class="Delimiter">)</span> || !is_space<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span id="L46" class="LineNr">46 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>current_recipe_name<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'global-space' should be of type <a href='043space.cc.html#L76'>address</a>:array:location, but tried to write '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L185'>end</a><span class="Delimiter">();</span> <span id="L47" class="LineNr">47 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>global_space<span class="Delimiter">)</span> <span id="L48" class="LineNr">48 </span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;routine already has a global-space; you can't over-write your globals&quot;</span> &lt;&lt; end<span class="Delimiter">();</span> <span id="L49" class="LineNr">49 </span> Current_routine<span class="Delimiter">-&gt;</span>global_space = data<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span> <span id="L50" class="LineNr">50 </span> <span class="Identifier">return</span><span class="Delimiter">;</span> <span id="L51" class="LineNr">51 </span><span class="Delimiter">}</span> <span id="L52" class="LineNr">52 </span> <span id="L53" class="LineNr">53 </span><span class="Comment">//: now marking variables as /space:global looks them up inside this field</span> <span id="L54" class="LineNr">54 </span><span class="Delimiter">:(after &quot;int space_base(const reagent&amp; x)&quot;)</span> <span id="L55" class="LineNr">55 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='046global.cc.html#L79'>is_global</a><span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Delimiter">{</span> <span id="L56" class="LineNr">56 </span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Current_routine<span class="Delimiter">-&gt;</span>global_space<span class="Delimiter">)</span> <span id="L57" class="LineNr">57 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;routine has no global space</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L185'>end</a><span class="Delimiter">();</span> <span id="L58" class="LineNr">58 </span> <span class="Conceal">¦</span> <span class="Identifier">return</span> Current_routine<span class="Delimiter">-&gt;</span>global_space + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span> <span id="L59" class="LineNr">59 </span> <span class="Delimiter">}</span> <span id="L60" class="LineNr">60 </span> <span id="L61" class="LineNr">61 </span><span class="Comment">//: for now let's not bother giving global variables names.</span> <span id="L62" class="LineNr">62 </span><span class="Comment">//: don't want to make them too comfortable to use.</span> <span id="L63" class="LineNr">63 </span> <span id="L64" class="LineNr">64 </span><span class="Delimiter">:(scenario global_space_with_names)</span> <span id="L65" class="LineNr">65 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [ <span id="L66" class="LineNr">66 </span> global-space:space<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">location:type</span><span class="Delimiter">,</span> <span class="Constant">10</span> <span id="L67" class="LineNr">67 </span> <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">23</span> <span id="L68" class="LineNr">68 </span> <span class="Special">1:num/space:global</span><span class="Special"> &lt;- </span>copy <span class="Constant">24</span> <span id="L69" class="LineNr">69 </span>] <span id="L70" class="LineNr">70 </span><span class="Comment"># don't complain about mixing numeric addresses and names</span> <span id="L71" class="LineNr">71 </span>$error: <span class="Constant">0</span> <span id="L72" class="LineNr">72 </span> <span id="L73" class="LineNr">73 </span><span class="Delimiter">:(after &quot;bool is_numeric_location(const reagent&amp; x)&quot;)</span> <span id="L74" class="LineNr">74 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='046global.cc.html#L79'>is_global</a><span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span> <span id="L75" class="LineNr">75 </span> <span id="L76" class="LineNr">76 </span><span class="Comment">//: helpers</span> <span id="L77" class="LineNr">77 </span> <span id="L78" class="LineNr">78 </span><span class="Delimiter">:(code)</span> <span id="L79" class="LineNr">79 </span><span class="Normal">bool</span> <a href='046global.cc.html#L79'>is_global</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span id="L80" class="LineNr">80 </span> string_tree* s = property<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">);</span> <span id="L81" class="LineNr">81 </span> <span class="Identifier">return</span> s &amp;&amp; s<span class="Delimiter">-&gt;</span>atom &amp;&amp; s<span class="Delimiter">-&gt;</span>value == <span class="Constant">&quot;global&quot;</span><span class="Delimiter">;</span> <span id="L82" class="LineNr">82 </span><span class="Delimiter">}</span> </pre> </body> </html> <!-- vim: set foldmethod=manual : -->