当前位置: 技术问答>linux和unix
Vim 如何有效的定位代码
来源: 互联网 发布时间:2017-01-02
本文导语: 本帖最后由 cqbamboo 于 2011-09-20 13:14:34 编辑 我在使用Vim的时候,有时候感觉快速定位代码不太方便,也许没有找到好的办法,请大家一起看看。 比如下面的代码,当前光标在162行, (1) 如果179行我打错了一个单词,需...
比如下面的代码,当前光标在162行,
(1) 如果179行我打错了一个单词,需要把mp改为map
(2) 如果需要把178行的i=0, 改成i=1
总之,我的困惑就是,如果想快速移动到屏幕中某个特定的位置,你们一般怎么做的。
162 static int alloc_pidmap(struct pid_namespace *pid_ns)
163 {
164 int i, offset, max_scan, pid, last = pid_ns->last_pid;
165 struct pidmap *map;
166
167 pid = last + 1;
168 if (pid >= pid_max)
169 pid = RESERVED_PIDS;
170 offset = pid & BITS_PER_PAGE_MASK;
171 map = &pid_ns->pidmap[pid/BITS_PER_PAGE];
172 /*
173 * If last_pid points into the middle of the map->page we
174 * want to scan this bitmap block twice, the second time
175 * we start with offset == 0 (or RESERVED_PIDS).
176 */
177 max_scan = DIV_ROUND_UP(pid_max, BITS_PER_PAGE) - !offset;
178 for (i = 0; i page)) {
180 void *page = kzalloc(PAGE_SIZE, GFP_KERNEL);
181 /*
182 * Free the page if someone raced with us
183 * installing it:
184 */
185 spin_lock_irq(&pidmap_lock);
186 if (!map->page) {
187 map->page = page;
188 page = NULL;
189 }
190 spin_unlock_irq(&pidmap_lock);
|
我以前看不少VIM方面的资料。我对VIM很熟。我的分不多,我想拿你的分。嚸嘿,不知道行不行。
如未提示,以下操作都是在命令模式下:可能部分缩写未做求证,但个人觉得还是比较容易理解。
VIM命令大多都可以带一个数字前缀或数字范围:
如5dd表示从当前行开始删除5行。
1,3d表示删除第1~3行
下面回答你的问题了。
当前光标在162行
(1) 如果179行我打错了一个单词,需要把mp改为map
->行号+G
(答:179G)
(2) 如果需要把178行的i=0, 改成i=1
->从当前位置跳到的当前位置下,上,左,右的字符的快捷键是:j,k,h,l
->直接修改字符可以:按r(replace),然后敲入你想改成的字符:
(答:跳到要更改的字符0后,按r,再输入1)
总之,我的困惑就是,如果想快速移动到屏幕中某个特定的位置,你们一般怎么做的。
位置移动我划成以下几类:我觉得应该足够你用的了。
屏幕位置操作:
->屏幕顶行:H
屏幕中间行:M
屏幕底行:L
(H:high, M:midle, L:Low)
向上/下滚屏:CTRL+y/e(效果类似于用竖直滚动条)
屏幕向上/下移动半页: CTRL+u/d (u:up, d:down)
屏幕向上/下移动一页: ctrl+b/f (b:backward, f:forward)
行间操作:
向下/上跳N行: Nj/k
直接跳到第N行:NG (就是的G即是GO之意)
下/上行行首:+/-
行内操作:
当前单词词首: b(begin), [长单词可用B]
当前单词词尾: e(end), [长单词可用E]
下一个单词词首:w(word)
从当前位置开始向后定位到指定字符c处:fc (f:find), [向前定位用F]
行首/尾:0/$
句首/尾: (/)
段首/尾:{/}
文件操作:
跳到文件首行:gg
跳到文件末行:G
跳到第文件n%的行: n%
如未提示,以下操作都是在命令模式下:可能部分缩写未做求证,但个人觉得还是比较容易理解。
VIM命令大多都可以带一个数字前缀或数字范围:
如5dd表示从当前行开始删除5行。
1,3d表示删除第1~3行
下面回答你的问题了。
当前光标在162行
(1) 如果179行我打错了一个单词,需要把mp改为map
->行号+G
(答:179G)
(2) 如果需要把178行的i=0, 改成i=1
->从当前位置跳到的当前位置下,上,左,右的字符的快捷键是:j,k,h,l
->直接修改字符可以:按r(replace),然后敲入你想改成的字符:
(答:跳到要更改的字符0后,按r,再输入1)
总之,我的困惑就是,如果想快速移动到屏幕中某个特定的位置,你们一般怎么做的。
位置移动我划成以下几类:我觉得应该足够你用的了。
屏幕位置操作:
->屏幕顶行:H
屏幕中间行:M
屏幕底行:L
(H:high, M:midle, L:Low)
向上/下滚屏:CTRL+y/e(效果类似于用竖直滚动条)
屏幕向上/下移动半页: CTRL+u/d (u:up, d:down)
屏幕向上/下移动一页: ctrl+b/f (b:backward, f:forward)
行间操作:
向下/上跳N行: Nj/k
直接跳到第N行:NG (就是的G即是GO之意)
下/上行行首:+/-
行内操作:
当前单词词首: b(begin), [长单词可用B]
当前单词词尾: e(end), [长单词可用E]
下一个单词词首:w(word)
从当前位置开始向后定位到指定字符c处:fc (f:find), [向前定位用F]
行首/尾:0/$
句首/尾: (/)
段首/尾:{/}
文件操作:
跳到文件首行:gg
跳到文件末行:G
跳到第文件n%的行: n%
|
:行号 ---》跳到指定行
/关键字 ---》向下搜索, n ---》下一个
?关键字 ---》向上搜索
ctl + f ---->向下翻页
ctl + b ----->向上翻页
/关键字 ---》向下搜索, n ---》下一个
?关键字 ---》向上搜索
ctl + f ---->向下翻页
ctl + b ----->向上翻页
|
(1) 如果179行我打错了一个单词,需要把mp改为map
(2) 如果需要把178行的i=0, 改成i=1
总之,我的困惑就是,如果想快速移动到屏幕中某个特定的位置,你们一般怎么做的。
---------------
179g直接跳转过去,到179行即可
还有
(2) 如果需要把178行的i=0, 改成i=1
总之,我的困惑就是,如果想快速移动到屏幕中某个特定的位置,你们一般怎么做的。
---------------
179g直接跳转过去,到179行即可
还有
|
按M,定位至屏幕中央
需要的话,再k或j调整一下
需要的话,再k或j调整一下
|
很详细.
经常编译出错时会有行号提示, 这时候直接定位到行也很方便.
vi a.c +行号
|
一般隔个10来行我就鼠标移过去了。。。
|
++
|
到底是使用鼠标还是键盘的问题。我觉得跟个人的习惯比较大吧。
有很多熟悉linux的人,基本不怎么用鼠标,他们一部分人认为鼠标太麻烦,可能是因为不想让自己的手在键盘和鼠标之间折腾吧。
如果说是屏幕中指定位置的话,键盘最快的方法就是直接先用MG(M代表第几行)定位到行,然后再Nw,这个N是估计值,就是从当前位置向后定位到第N个单词。或者先(MJ/K)跳到指定行,然后再Nw,
有很多熟悉linux的人,基本不怎么用鼠标,他们一部分人认为鼠标太麻烦,可能是因为不想让自己的手在键盘和鼠标之间折腾吧。
如果说是屏幕中指定位置的话,键盘最快的方法就是直接先用MG(M代表第几行)定位到行,然后再Nw,这个N是估计值,就是从当前位置向后定位到第N个单词。或者先(MJ/K)跳到指定行,然后再Nw,
|
快速定位:179G,然后用w把光标定位在m上,然后用a使光标向后移动并插入
模糊定位:179行大概在中下位置,那么直接M让光标移动到屏幕中间,然后j向下移动到179行,后面的步骤和上边一样……
或者干脆直接/进行查找mp,找到以后光标自然就在mp上,用a插入就行了……
至于把i=0变成i=1也是一样的做法……
LZ得适应一下vi的习惯,vi并不是做什么都比鼠标快,像这种小范围的定位,vi不可能比鼠标快……
vi之所以效率高,是因为你可以不停的进行操作,节省了手在键盘和鼠标之间来回动所浪费的时间……
(可是我啥时候才能到那种不停操作的地步啊……)
模糊定位:179行大概在中下位置,那么直接M让光标移动到屏幕中间,然后j向下移动到179行,后面的步骤和上边一样……
或者干脆直接/进行查找mp,找到以后光标自然就在mp上,用a插入就行了……
至于把i=0变成i=1也是一样的做法……
LZ得适应一下vi的习惯,vi并不是做什么都比鼠标快,像这种小范围的定位,vi不可能比鼠标快……
vi之所以效率高,是因为你可以不停的进行操作,节省了手在键盘和鼠标之间来回动所浪费的时间……
(可是我啥时候才能到那种不停操作的地步啊……)
|
0 数字零移动光标到当前行的最前面的字符
$ 移动光标到当前行的最后一个字符。
G 移动到着这个文档的最后一行,nG:n为数字移动到这个文件的第n行。
gg 移动到这个文件的第一行
$ 移动光标到当前行的最后一个字符。
G 移动到着这个文档的最后一行,nG:n为数字移动到这个文件的第n行。
gg 移动到这个文件的第一行