在没有鼠标或键盘箭头的情况下滚动 Visual Studio Intellisense 列表

Posted

技术标签:

【中文标题】在没有鼠标或键盘箭头的情况下滚动 Visual Studio Intellisense 列表【英文标题】:Scrolling through Visual Studio Intellisense list without mouse or keyboard arrows 【发布时间】:2013-08-11 18:57:47 【问题描述】:

我是 Visual Studio 中 Intellisense 的重度用户。我也是一个“把你的手放在键盘上”和“把它们放在原位”的***者,所以我一直在寻找让我的手保持在 AS 中心的方法DF   JKL; kbd> 尽可能多的键。

每当在 Visual Studio 中弹出 Intellisense 列表时,如果列表中有许多单词以与我要选择的单词相同的字母开头,则键入前几个字母以在我的选择中磨练'没有帮助,因为在我输入足够的字符以最终到达单词中的第一个唯一字符之前,列表不会跳转到我的首选选择。将我的右手从 JKL; 键上移开并伸到上/下键通常更快箭头键手动滚动列表。

我宁愿将双手保持在原位,理想情况下使用 JK 键在 Intellisense 列表中上下移动(类似了解 JK 如何在 Vim 中上下移动……尤其是因为我在 Visual Studio 中使用 VsVim)。

MSDN Intellisense documentation 仅列出向上/向下箭头键和滚动(鼠标滚轮、PgUp/PgDn 键等)作为执行此操作的选项:


以下是我的问题(按优先顺序排列):

    Visual Studio 中是否有任何现有的键盘快捷键可让您在滚动 Intellisense 列表时将手保持在原位?

    有没有办法自定义映射键盘键(例如 JK)在 Intellisense 列表中进行向上/向下滚动?

    是否有任何插件可以启用此功能?

    还有其他方法可以做到这一点吗?

【问题讨论】:

您可以使用 Visual Studio SDK 创建自己的 Visual Studio 扩展并执行您能想象到的几乎所有改进,但这是一个巨大的话题(我现在才刚刚开始学习) 顺便问一句写得非常好... @HighCore 是的,这是我现在不想花时间解决的任务! (虽然我真的受到了 VsVim 的启发,而且它每天对我有多大帮助......也许有一天?) 几个问题,为什么您喜欢将手指放在键盘上的初始位置?是因为您认为这样可以更有效地工作,还是因为它在人体工程学上对您来说更舒适?另外,如果您在没有任何修饰键的情况下使用 J/K 滚动,系统如何知道您是仍在尝试键入名称的前几个字母还是在尝试滚动? @DanM 一切都与效率有关。你关于在没有修饰符的情况下使用 J/K 的问题非常有见地……你是对的……VS 怎么知道区别?使用修饰符(例如 Ctrl+J)对我来说是完全可以接受的(我已将 CapsLock 重新映射为 Ctrl,因此几乎可以毫不费力地达到) 【参考方案1】:

我已将 CTRL+P 重新映射到 Edit.LineUp 并将 CTRL+N 重新映射到 Edit.LineDown,这在 Intellisense 下拉列表中有效。出于某种原因,按下 CTRL 时,Intellisense 下拉菜单会变暗,因此很难看到下拉菜单中的内容。不过这不是什么大问题,因为您总是可以释放 CTRL 并且它会再次亮起。当我不知道方法名称并想浏览它时,我主要使用此方法。

如果我知道名称或名称的一部分,通常只需在方法名称中键入一些字母会更快。例如,如果我知道我想要的方法的名称是 GetHashCode,那么我只需输入“geh”或“has”或类似名称,因为这将由智能感知匹配。

【讨论】:

调光是他们在 VS 2010 前后添加的一个可用性功能。Intellisense 有一个讨厌的习惯,就是会完全模糊您想要查看的代码,这意味着您必须关闭 Intellisense,阅读代码,然后重新打开智能感知。现在,只需按一下 Ctrl 键,它就会变得透明,因此您可以快速阅读代码并再次松开按键,而无需离开智能感知。 哈利路亚!!我没想到有人会解决这个问题!按照您的提示,我选择使用 Alt+J 和 Alt+K,这更接近我在 Vim 中用于向上/向下的 J/K 键。此外,Alt 键不会像 Ctrl 那样使 Intellisense 窗口变暗。但这里的关键是您将 Edit.LineUp 和 Edit.LineDown 命令确定为解决方案的来源。太激动了……谢谢! 您还可以设置 Edit.CharLeft 和 Edit.CharRight 以完全摆脱箭头键。 (我猜你已经知道了,但仍然......) Edit.LineUpEdit.LineDown 在 VSCode 1.4.2 中消失了;他们应该是selectPrevSuggestionselectNextSuggestion【参考方案2】:

花 30 美元买一个二手 Kinect,然后将语音命令或头部手势映射到鼠标滚动事件。 SDK 非常易于使用。您可以说头部倾斜是向左滚动还是向右滚动。

SDK http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx

文档 http://www.microsoft.com/en-us/kinectforwindows/develop/learn.aspx

示例项目 http://channel9.msdn.com/coding4fun/kinect

您只受想象力的限制。

【讨论】:

哇!很有创意的想法!跳出框框思考真是太棒了!我看不出自己想要使用这种方法,因为键盘更适合我的风格,但我必须说这非常棒。 +1 @RSW 谢谢,不过我不能太相信。人们一直在破解那个东西。那里有一些非常酷的项目。我最喜欢的是人们使用 2 个相互垂直的 Kinect 以 3D 动态重建他们的房间 我的同事会喜欢我新的智能导航语音命令!【参考方案3】:

我不确定您更喜欢使用哪种键盘,但是否可以选择带有拇指可操作滚轮的键盘?或者像Microsoft Natural Ergonomic 4000 这样的东西,它本身就是一个非常棒的键盘,但有一个缩放滑块,你的食指可以在主行访问。 With some work您可以将缩放功能更改为向上滚动和向下滚动。

【讨论】:

【参考方案4】:

我希望完成 Doktorn 在 Visual Studio Code 中建议的相同操作,因此我将把解决方案放在这里以防万一有人需要。

您必须在 keybindings.json 中添加两个新的键绑定:

[
     "key": "alt+j",                    "command": "selectPrevSuggestion",
                                         "when": "suggestWidgetVisible" , 
     "key": "alt+k",                    "command": "selectNextSuggestion",
                                         "when": "suggestWidgetVisible"                                                                                  
]

【讨论】:

完美,正是我想要的! 非常感谢;最佳答案Edit.LineUpEdit.LineDown 不再存在。我认为它们已更改为您建议的 selectPrevSuggestionselectNextSuggestion 它在我的机器上不起作用。你知道可能是什么原因吗?我就是这么做的 + 没有冲突 key.k【参考方案5】:

此方法适用于 VSCode for Windows 10,最新版本。就像向上和向下箭头一样工作。

    
        "key": "alt+j",
        "command": "selectNextSuggestion",
        "when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
    ,
    
        "key": "alt+k",
        "command": "selectPrevSuggestion",
        "when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
    

【讨论】:

【参考方案6】:

这个!

当我的手离开键盘时,90% 的时间都是在用箭头键,通常是为了接受智能感知建议。

所以自动热键。下面的脚本为我提供了在所有应用程序中都相同的箭头键!我把它们放在第一排右手边,以尽量减少碰撞,同时仍然符合人体工程学。一个脚本在 SSMS、Visual 和 Visual Code 以及其他所有内容中执行相同的操作。

ctrlu向上

ctrli向下

ctrlo

ctrlp

像魅力一样工作。这对我来说绝对是基本的。唯一的摩擦是默认情况下它将以正常权限运行,因此在您以管理员身份启动的程序中将不可用。如果需要,请将 autohotkey 设置为以管理员身份运行。每次启动时您都会收到 UAC 提示,但您会一直使用箭头键。 Autohotkey 在应用程序获取组合键之前拦截它们,因此您将丢失映射到这些键的应用程序快捷方式。在 VS Code 中,ctrlp 是必不可少的,但 ctrle 做同样的事情。 ctrlp 在许多其他应用中是“打印”,但您上次打印任何东西是什么时候?

# ArrowKeys.ahk

^u::
Send,up
Return

^i::
Send,down
Return

^o::
Send,left
Return

^p::
Send,right
Return

【讨论】:

“我把它们放在楼上一排以避免碰撞”我不知道你的意思是什么。你在说什么文件?在此先感谢其他解决方案不能解决我的问题。 上面的代码是一个自动热键脚本,将 ctrl-u 映射到向上箭头, ctrl-i 映射到向下箭头等等。您需要下载并安装 autohotkey,然后将代码粘贴到默认脚本中。我选择了键盘的第一行以避免与其他快捷方式发生冲突,但如果您不喜欢它可以自定义它。这意味着我有箭头键,而无需从原始位置抬起手。

以上是关于在没有鼠标或键盘箭头的情况下滚动 Visual Studio Intellisense 列表的主要内容,如果未能解决你的问题,请参考以下文章

用鼠标移动窗口时,移动上下滚动条时总是感觉像水波一样挪动是怎么回事,

如何在 FLTK 中对两个不同的小部件同时使用键盘箭头和鼠标单击?

有没有办法使用键盘快捷键缩放 Visual Studio 文本编辑器?

为啥我的鼠标滚动时会莫名其妙的变成放大缩小页面了?该怎么办?

到达最后一张幻灯片时,使用键盘左箭头键不应向左滚动

TextInput中的kivy ScrollView实现