如何使用VIM

时间:2017-02-28 07:04:33

标签: vim vi

以下是我从互联网上获取的代码片段。假设我们位于第48行(靠近底部的第二个输入),但是,我们需要回到第8行的第二个 。我们只是点击了:82o

如果行号非常大(例如,1425)并且行内有一些相同的单词,该怎么办?

在这种情况下,它需要很多击键,即使我到达线后我也必须点击w。在大文件中随机访问某个单词的情况下,VIM如何与鼠标竞争,在这种情况下,您只需要用鼠标移动指针即可实现此目的?

修改:代码是我从互联网上获取的一个片段,用于说明我的问题。可能的情况可能是我正在1148行工作,我想回到第1108行只是为了更改注释中的单词,或者我需要通过在行1108中进行一些改变来修复错误。因此,回归的地方难以预测且几乎是随机的。

编辑:我希望了解使用vanilla Vim实现此目标的最佳做法。但您可以随意提供基于插件的解决方案。



<HTML>
<HEAD><TITLE> Banner</TITLE>

<SCRIPT LANGUAGE= "javascript">
// Puts the text to scroll into variable called sent - SECTION A
// uses length propert to assess its length and put into variable slen
// initalizes a,b,n, and subsent variables
var sent = "This is a demonstration of a banner moving from the left to right. It makes use of the substring property of Javascript to make an interesting display"
var slen = sent.length
var siz = 25
var a = -3, b = 0
var subsent = "x"

// Creates a function to capture substrings of sent - SECTION B
function makeSub(a,b) {
subsent = sent.substring(a,b) ;
return subsent;
}

//Creates a function that increments the indexes of the substring - SECTION C 
//each time and calls the makeSub() function to geneate strings
//a indicates start of substring and siz indicates size of string required
function newMake() {
a = a + 3;
b = a + siz
makeSub(a,b);
return subsent
}

//function uses loop to get changing substrings of target - SECTION D
//repeatedly calls newMake to get next substring
//uses setTimeout() command to arrange for substrings to display 
// at specified times
function doIt() {
for (var i = 1; i <= slen ; i++) {
setTimeout("document.z.textdisplay.value = newMake()", i*300);
setTimeout("window.status = newMake()", i*300);
}
}

</SCRIPT> 
</HEAD>

<BODY >
<HR> <CENTER>
<FORM NAME="z">
<INPUT NAME="textdisplay" TYPE="text" SIZE=25> <P>
<INPUT NAME="doit" Type="button" value = "Run Banner" onClick = "doIt()"> 
</FORM></CENTER>

<HR>

</BODY></HTML>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:2)

如果您知道应该找到哪个单词,那么导航的最佳方式就是搜索它。

我会做/of来搜索,我就在那里。

我发现这比移动鼠标指针更容易。

现在看到真正大文件的情况,relativenumbers可以帮到你。

set relativenumber

现在从1148转到1104,您可以执行40k然后使用 f 来获得所需的角色。

您可以在 f 前加上数字,以移至该字符的第n个外观。你也可以搜索。

我再次发现这比使用鼠标更容易。

如果你有足够的命令来搜索和移动前缀为 j k ,那么你将比使用鼠标更快。

答案 1 :(得分:1)

编辑不是您在示例中随机执行的操作。导航通常从一个兴趣点发生到另一个相关兴趣点,无论两个POI是同一任务的一部分还是相关任务的一部分。

你的第一个例子是非常不现实的,原因有两个:

  1. 因为没有任何理由从第一个POI跳到第二个POI,因为它们完全无关,
  2. 因为整个文件可能不完全适合编辑窗口,这会使鼠标无关紧要。
  3. 从初始状态开始,唯一可能有用的导航是跳转到事件处理程序的定义,该定义只有?do<CR>。请注意,该功能已经在我们的鼻子下,所以如果我们想要的只是知道doIt()做什么,就不需要导航到开头。

    你的第二个例子过于抽象,无法使用。

    您可以使用的本地导航工具对应于各种缩放级别:

    • gegEbBwWeE在单词级别,
    • fFtT;,0^$g_g^g$在线级,
    • (){}在段落级别,
    • ggnG在缓冲级别,
    • nHMnL在窗口级别,
    • 以及各种级别的其他命令,例如hjklgm

    但最强大的是搜索,?/nN(与set incsearch一起使用),可让您轻松地直接跳到任何地方。

答案 2 :(得分:0)

关键字搜索

对于随机访问,使用\{keyword}进行关键字搜索通常是您的最佳选择。虽然我有一种感觉,这个问题(使用 这个词)是为了破坏这种方法,我会指出你仍然可以通过继续输入下一个单词来运行这个搜索在 之后。通过这种方法,我们最多可以看到5-7次击键。如果你问我,这比使用鼠标要好得多。

的EasyMotion

其他几个人提到了EasyMotion项目。我对这个项目不太熟悉,所以我不会再对此进行评论。

为什么真的避开鼠标?

我不相信使用Vim获得的额外效率是不惜一切代价避免使用鼠标的结果;相反,它是训练自己避免不惜一切代价离开主页的结果。这不是鼠标的机制,而是键盘与鼠标之间不断的任务切换,这使我们的速度降低了