在Vim中编程:您*用什么特定机制来“复制 - 粘贴”变量?

时间:2011-11-09 19:06:56

标签: vim ide editor copy-paste

注意

这被标记为一个潜在的主观问题,但它不是主观的。要求学习人们使用Vim的各种特定方式,以便来自“面向鼠标和键盘”的文本编辑器的人可以学习更多Vim编辑方式。

这是 关于 个人偏好 的主观问题,或者哪种编辑或编辑风格最佳。< / p>

这是一个关于 机械步骤 的具体问题,可以使用其他编辑器作为交叉引用的基线,在Vim编辑器中获取结果。< / p>

问题

假设您的Vim中有以下代码,并且您希望在之前从之后的,其中之前的内容如下所示:

// Before //

$mynames    = Array();
$mynames['alice'] = 'alpha';

......看起来像这样......

// After //

$mynames    = Array();
$mynames['alice'] = 'alpha';
$mynames['betty'] = 'bravo';
$mynames['cindy'] = 'charlie';
$mynames['deana'] = 'delta';

非VIM编辑如何做到

使用非vim编辑器,程序员A只需复制alice的第一行,将其多次粘贴到编辑器中,然后重新编辑这些值,以便 alice alpha 替换为适当的值,一次编辑一行。

使用非vim编辑器,程序员B将创建一个跨越四行的矩形选择,然后开始键入常用文本 $ mynames [''] =''; 然后返回并填写适当的值,一次编辑一行。

关于VIM如何?

鉴于Vim与当时“鼠标和键盘”风格的编辑器截然不同,这是对使用Vim进行编辑所采取的具体步骤的深入了解。显然,可以单独键入每一行,但假设在Vim中有一种节省时间的方法,与程序员A和程序员B在上面做的比较。

1)vim程序员如何使用上述节省时间的方法进行此编辑操作?

2)如果有人要在互联网上搜索更多关于Vim编辑会话与“鼠标和键盘”样式编辑的特定“逐步”比较的例子,那会搜索什么?

3 个答案:

答案 0 :(得分:6)

我使用相同的,首先我复制一行。然后随时粘贴我需要的东西。

然后您可以创建一个宏来编辑密钥。当光标在我需要工作的第一行时。 (一个粘贴的线)

    qq f[ci'<C>-<o>q  "recordes a macro to find a [block] and 
change inner quotes ' and stays in insert mode

然后你可以随时用@q播放你的宏。 (我有一张地图Q = @q,用于按Shift + q快速启动宏) 与您可以用于值的方式相同:

 qq f=f'ci'<C>-<o>q

用于查找值块的宏并转到插入模式。

比较的答案我将节省时间将我的手从键盘移动到鼠标时间=编辑行数。选择要更改的块。毫无疑问,Vim的效率更高。

答案 1 :(得分:3)

如果我提前知道不同的价值观会是什么,我会采用迂回的方法。我将从这开始:

$mynames    = Array();
alice alpha
betty bravo 
cindy charlie
deana delta

然后我将光标放在alice前面,点击 Ctrl + V ,向下移动到deana,然后点击 Shift + I 进入插入模式并输入$mynames[',然后输入 Esc 。这会在所有选定的行中插入文本。然后我重复'] = ',最后是';'

不是最有效的方式,但通常是首先想到的。

答案 2 :(得分:1)

我喜欢AlexRus的解决方案(我喜欢Vim宏)。

但我认为更现实的情况是粘贴来自其他应用程序/文档的键/值对:

betty bravo
cindy charlie
deana delta

并在每一行上执行一系列转换。

解决方案1 ​​

我们可以使用<S-v>jj或其他方式选择所有三行,并在选择中应用一系列搜索/替换:

:'<,'>s/^/$mynames['
gv to reselect
:'<,'>s/ /'] = '
gv to reselect
:'<,'>s/$/';

整个编辑序列如下所示:

<S-v>jj:s/^/$mynames['<CR>gv:s/ /'] = '<CR>gv:s/$/';<CR>

解决方案2

我们可以应用单个搜索/替换

:'<,'>s/^\(.*\) \(.*\)$/$myname['\1'] = '\2';

其中搜索部分通过实际匹配文本来隔离行的开头(^),单词()和行尾($)之间的空格在他们和替换部分之间用$myname[' +第一场比赛(\1)+ '] = ' +第二场比赛(\2)+ ';替换整行

我对正则表达式不好所以我必须检查我的笔记才能把它放在一起但我毫不怀疑很多Vim用户能够一次性输入那种命令。有一天我会的。

整个编辑序列如下所示:

<S-v>jj:s/^\(.*\) \(.*\)$/$myname['\1'] = '\2';<CR>

解决方案3

使用相同的设置,我们可以在<C-v>的第一行的开头输入 VISUAL-BLOCK 模式,根据需要向下移动并输入I$myaccess['<Esc>获得:

$mynames['betty bravo
$mynames['cindy charlie
$mynames['deana delta

将光标移动到f<Space>的单词之间的空格,再次点击<C-v>,将选区展开到底部,然后输入c'] = '<Esc>以获取:

$mynames['betty'] = 'bravo
$mynames['cindy'] = 'charlie
$mynames['deana'] = 'delta

然后使用$移至该行的末尾,再次点击<C-v>,再次选择您想要的内容并输入A';<Esc>进行最后一次触摸。

整个编辑序列如下所示:

<C-v>jjI$myaccess['<Esc>f <C-v>jjc'] = '<Esc>$<C-v>jjA';<Esc>