【问题标题】:Sublime Text 2: How to Page Up/Down without moving the cursorSublime Text 2:如何在不移动光标的情况下向上/向下翻页
【发布时间】:2013-06-17 09:50:11
【问题描述】:

我在 OS X 10.8.4 上使用 ST2。当我使用 Home 和 End 键时,视口会移动,而光标会被单独留下。这是标准的 Mac 行为,也是我所期望的。

但是,当我使用 Page Up (pageup/pgup) 和 Page Down (pagedown/pgdn) 时,光标会随着视口移动。这不是其他 Mac 应用程序的行为方式,我也希望将光标单独留在这些键上。

通过将它添加到我的键绑定中,我已经能够完成这个工作:

[
   { "keys": ["pageup"], "command": "scroll_lines", "args" : {"amount": 30.0} },
   { "keys": ["pagedown"], "command": "scroll_lines", "args" : {"amount": -30.0} }
]

但是,其中的金额是硬编码的。看起来 viewport_extent 会让我得到视口的高度,但是我如何在键绑定文件中使用它呢?这甚至是正确的解决方案吗?我觉得要得到这种行为是一项非常艰巨的工作。

提前致谢。

【问题讨论】:

  • 这个问题帮助我找到了如何在 Sublime 上使用 Page UpPage Down 作为键盘快捷键。谢谢!

标签: sublimetext3 sublimetext2 text-cursor


【解决方案1】:

为此需要一个文本插件。感谢 ST 论坛上的用户 bizoo,您不必自己编写:

http://www.sublimetext.com/forum/viewtopic.php?f=3&t=12793

这完全符合我的预期。


Sublime Text 3 更新:您可以按照下面的说明进行操作,稍作更改,文件应以.py 结尾(例如scroll_lines_fixed.py)并且在~/Library/Application Support/Sublime Text 3/Packages/User/ 中应该是松散的文件夹。


Sublime Text 2 更新: 这还不清楚,而且还使用了一个裸露的 URL,可以想象将来可能会死掉。所以这里有一个关于你需要做什么的更完整的解释。

  1. 将这四行添加到 Sublime Text 2 > Preferences > Key Bindings - User,在文件中已经存在的任何方括号内:

    [
        { "keys": ["ctrl+up"], "command": "scroll_lines_fixed", "args": {"amount": 1.0 } },
        { "keys": ["ctrl+down"], "command": "scroll_lines_fixed", "args": {"amount": -1.0 } },
        { "keys": ["pageup"], "command": "scroll_lines_fixed", "args" : {"by": "pages", "amount": 1.0 } },
        { "keys": ["pagedown"], "command": "scroll_lines_fixed", "args" : {"by": "pages", "amount": -1.0 } }
    ]
    
  2. 在 Sublime Text 中,从菜单栏中选择“工具”>“新建插件...”选项。
  3. 用这个替换新文件的内容:

    import sublime, sublime_plugin
    
    class ScrollLinesFixedCommand(sublime_plugin.TextCommand):
       """Must work exactly as builtin scroll_lines command, but without moving the cursor when it goes out of the visible area."""
       def run(self, edit, amount, by="lines"):
          # only needed if one empty selection
          if by != "lines" or (len(self.view.sel()) == 1 and self.view.sel()[0].empty()):
             maxy = self.view.layout_extent()[1] - self.view.line_height()
             curx, cury = self.view.viewport_position()
             if by == "pages":
                delta = self.view.viewport_extent()[1]
             else:
                delta = self.view.line_height()
             nexty = min(max(cury - delta * amount, 0), maxy)
             self.view.set_viewport_position((curx, nexty))
          else:
             self.view.run_command("scroll_lines", {"amount": amount})
    
  4. 将文件保存到 ~/Library/Application Support/Sublime Text 2/Packages/ScrollLinesFixed/。您需要创建 ScrollLinesFixed 文件夹。
  5. 没有第 5 步。

【讨论】:

  • 这不像描述的那样工作。您将插件粘贴到哪个文件中?如果在Preferences > Key Bindings > User 中,大概在[...] 列表之外?但是由于amount未定义,所以出现语法错误??
  • 我刚刚使用这些步骤设置了一个新的 SublimeText 2 (2.0.2) 实例,它们按描述工作。你确定你没有使用 ST 3?
  • 感谢尼克的建议。自从我接触它已经两年了,但除非我的记忆在玩诡计,否则它是 ST 2.x
【解决方案2】:

只有我的 2 美分,但我的设置可以使用以下内容向上或向下滚动:

{ "keys": ["super+up"], "command": "scroll_lines", "args": {"amount": 1.0} },
{ "keys": ["super+down"], "command": "scroll_lines", "args": {"amount": -1.0} }

我使用的是 Mac,所以“超级”键是命令键,它是空格键左侧(或右侧)的第一个键。不确定 Windoze 上的等价物是什么;也许它是“开始”键或其他东西。无论如何,它就像一个魅力。

【讨论】:

  • 不过,这只会向上或向下滚动一行。我想要一个基于视口大小的滚动页面,就像在 TextEdit 和任何其他文本编辑器中一样。我下面的答案中的插件可以让你做到这一点。不过,感谢您的评论!
  • 将 "amount": 1.0 更改为 "amount": 30.0 一次滚动 30 行。足以满足我的需求。谢谢!
【解决方案3】:

只需使用Fn+up 向上翻页,Fn+down 向下翻页。

【讨论】:

  • 我在 SublimeText 2 2.0.2 (2221) 上并且行为没有改变。当您向上/向下翻页时,光标会随着视口一起移动,除非您进行了我上面描述的修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多