如何在自定义小部件中的vi运算符未决模式后移动zsh光标?

英戈迈耶

我开发了一个zsh插件,它是vi仿真模式下zsh的vim-easymotion移植。由于zsh的行编辑器具有多行支持,因此我增加了对行运动(jk)的支持。该插件还应该在vi操作符挂起模式下工作(例如,在删除模式下),因此我使用zshMARKandCURSOR变量将用户选择范围扩展到整行(因此,行运动将始终删除或更改整行,而不仅仅是部分行)其中的)。这是vim用户期望的行为。但是,更改/删除操作后的光标位置错误。光标应在已删除的行块之后的下一行的第一个单词上相反,光标在最后一行的末尾之前线段。我看不到在操作员挂起模式后更改光标的可能性,因为任何光标更改都将成为所选操作员区域的一部分。

所以我的问题是:有人知道执行vi运算符如何在zsh自定义小部件中更改光标位置吗?

更新

为了使问题易于理解,我尝试创建一个最小的问题示例:

这个小的zsh脚本可以通过以下方式获得:

function test-widget () {
    MARK=3
    CURSOR=6
}

zle -N test-widget

bindkey -M vicmd ' ' test-widget

如果您处于zsh的vicmd / normal模式(bindkey -v激活vi仿真并<esc>进入命令模式),现在可以按<space>将光标设置为当前编辑缓冲区中的第六个字符。如果输入vi操作符(如d后接)<space>,则从第三个字符到第六个字符的所有内容都将被删除(由于MARK变量的设置)。

删除示例:考虑您的编辑缓冲区是(标有的光标位置[]):

[a]bc def ghi

然后按d<space>,您将得到:

abc[f] ghi

但是,我想在相同的小部件调用中执行删除操作后更改光标的位置,例如:

abcf [g]hi

我不知道这怎么可能,因为所有更改CURSOR都会影响已删除文本的范围。

如何实现删除操作+光标定位?

斯蒂芬·查泽拉斯(Stephane Chazelas)

这听起来我你将不得不重新定义采取动作,如绑定到那些小部件dcygugUg~...

就像是:

test-widget () {
  MARK=3
  CURSOR=6
  MOVE_AFTER_MOTION=2
}
zle -N test-widget
bindkey -M vicmd ' ' test-widget

for widget in vi-{delete,change,yank,{down,oper-swap,up}-case}; do
  $widget () {
    local ret
    zle ".$WIDGET"; ret=$?
    if (($+MOVE_AFTER_MOTION)); then
      (( CURSOR += MOVE_AFTER_MOTION ))
      unset MOVE_AFTER_MOTION
    fi
    return "$ret"
  }
  zle -N $widget
done

您可能还必须考虑$NUMERIC不在1时该怎么办

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java中的所有数字之后移动所有运算符?

来自分类Dev

如何在自定义小部件中显示QChartView?

来自分类Dev

如何在 Flutter 中自定义 Slider 小部件?

来自分类Dev

C#如何在自定义结构中创建许多类似的运算符重载

来自分类Dev

如何在Devops Release管道中的自定义条件下使用OR和And运算符

来自分类Dev

C#如何在自定义结构中创建许多类似的运算符重载

来自分类Dev

如何在应用小部件中创建类似于Google Play音乐小部件中的自定义视图?

来自分类Dev

如何快速实现自定义运算符[]

来自分类Dev

Swift中的自定义运算符

来自分类Dev

Javascript中的自定义条件运算符

来自分类Dev

在Python中重载自定义类型的运算符

来自分类Dev

Doctrine DQL中的自定义运算符

来自分类Dev

如何在dplyr%>%运算符之后使用自定义函数?

来自分类Dev

如何在VueJS自定义过滤结果上应用函数/运算符?

来自分类Dev

如何在rxcpp自定义运算符中正确推断泛型

来自分类Dev

如何在C语言中的GTK3中创建自定义小部件?

来自分类Dev

如何在QT Creator中升级自定义小部件

来自分类Dev

如何在Flutter中将自定义小部件项目填充到ListView中?

来自分类Dev

如何在KV lang中设置来自父项的自定义窗口小部件的文本?

来自分类Dev

如何在Flutter中自定义Slider小部件的拇指颜色?

来自分类Dev

如何在Django表单中为窗口小部件提供自定义名称

来自分类Dev

如何在Qt / C ++中构建自定义的本机OSX Webkit小部件?

来自分类Dev

如何自定义android小部件

来自分类Dev

Yii中的自定义小部件

来自分类Dev

Yii中的自定义小部件

来自分类Dev

自定义小部件中的自定义onClickListner-如何?

来自分类Dev

C ++-没有自定义交换功能的移动赋值运算符?

来自分类Dev

未为类型定义VB .net bc30452运算符=-如何创建自定义运算符

来自分类Dev

如何在不重载比较运算符的情况下专门针对std :: max的自定义类型?

Related 相关文章

  1. 1

    如何在Java中的所有数字之后移动所有运算符?

  2. 2

    如何在自定义小部件中显示QChartView?

  3. 3

    如何在 Flutter 中自定义 Slider 小部件?

  4. 4

    C#如何在自定义结构中创建许多类似的运算符重载

  5. 5

    如何在Devops Release管道中的自定义条件下使用OR和And运算符

  6. 6

    C#如何在自定义结构中创建许多类似的运算符重载

  7. 7

    如何在应用小部件中创建类似于Google Play音乐小部件中的自定义视图?

  8. 8

    如何快速实现自定义运算符[]

  9. 9

    Swift中的自定义运算符

  10. 10

    Javascript中的自定义条件运算符

  11. 11

    在Python中重载自定义类型的运算符

  12. 12

    Doctrine DQL中的自定义运算符

  13. 13

    如何在dplyr%>%运算符之后使用自定义函数?

  14. 14

    如何在VueJS自定义过滤结果上应用函数/运算符?

  15. 15

    如何在rxcpp自定义运算符中正确推断泛型

  16. 16

    如何在C语言中的GTK3中创建自定义小部件?

  17. 17

    如何在QT Creator中升级自定义小部件

  18. 18

    如何在Flutter中将自定义小部件项目填充到ListView中?

  19. 19

    如何在KV lang中设置来自父项的自定义窗口小部件的文本?

  20. 20

    如何在Flutter中自定义Slider小部件的拇指颜色?

  21. 21

    如何在Django表单中为窗口小部件提供自定义名称

  22. 22

    如何在Qt / C ++中构建自定义的本机OSX Webkit小部件?

  23. 23

    如何自定义android小部件

  24. 24

    Yii中的自定义小部件

  25. 25

    Yii中的自定义小部件

  26. 26

    自定义小部件中的自定义onClickListner-如何?

  27. 27

    C ++-没有自定义交换功能的移动赋值运算符?

  28. 28

    未为类型定义VB .net bc30452运算符=-如何创建自定义运算符

  29. 29

    如何在不重载比较运算符的情况下专门针对std :: max的自定义类型?

热门标签

归档