减少vim中的击键

时间:2014-10-04 15:00:02

标签: vim

下面是我在vim中编辑的代码片段。 目前我的光标位于插入模式下的< cursor> 。 我想删除光标上方的大括号( {)。 什么是实现它的最佳方式。

目前我这样做如下所示

ESC => to go back to escape mode
k   => to move up to previous line
x   => delete {
j   => to move back to the original line
i   => switch back to insert mode to continue my editing


long long modpow(long long a, long long b)                                                             
{                                                                                                                                                                          
    while (b != 1) {  <-- delete                                                                                 
        a = a *<cursor> temp;

我的按键可以减少吗?

提前致谢

2 个答案:

答案 0 :(得分:4)

我不会专注于击键减少。相反,我想专注于如何将其分解为更小的助记符:

  • 我们正在移动光标,因此通过<esc>
  • 退出插入模式
  • 是一系列复杂的跳跃?考虑通过mm
  • 设置标记
  • 移动光标到大括号。可以通过[{(首选),?{<cr>或较慢的方法完成,例如k$
  • 删除大括号x(首选),dls,如果我们要用某些内容替换它。
  • 通过跳转`^``,已知标记`m<c-o>g;(两次)移回到上一个插入位置,或者gi返回最后一个插入并重新插入插入模式

这概述了如何思考每件作品以及如何思考它的选项。我个人会做以下事情:

<esc>[{x``a

注意:这不是最快的(我应该使用gi),但这是我的想法,我发现在我的工作流程中常常使用``来提供帮助

有关详细信息,请参阅:

:h ``
:h x
:h [{
:h ?
:h m
:h s
:h ctrl-o
:h `^
:h g;
:h gi

答案 1 :(得分:1)

先说几句:

  • 你的代码示例是乱七八糟的尾随空格,你有比计算击键更重要的事情,

  • 您列出的命令无法执行您想要的操作,因为左括号根本不在光标上方:

    long long modpow(long long a, long long b)
    {
        while (b != 1) {
        a = a *| temp;
    
    <Esc>kxji
    
    long long modpow(long long a, long long b)
    {
        while b != 1) {
        a = a |* temp;
    

与Vim中的所有内容一样,有许多方法可以实现您的目标。

  • 使用与示例相同的策略,但使用正确的命令和大量按键

    <Esc>klllllllllxjhhhhhi
    
  • 使用相同的策略,但击键次数少得多:

    <Esc>k$xjT*
    
  • 使用不同的策略:

    <Esc>?{<CR>xgi
    

请注意,删除该左大括号将留下一个尾随空格,因此您可能应该重新考虑一下“计划”:

    <Esc>? {<CR>Dgi