【问题标题】:De-indent region as rigid block将区域缩进为刚性块
【发布时间】:2016-04-10 21:56:29
【问题描述】:

我想将一个区域向左移动一个制表位,作为一个刚性块(不改变内部行的缩进)。

这是来自相关documentation的引用,但我不明白:

C-x TAB 这个命令用来改变所有行的缩进 从该区域开始,将受影响的线作为一个“刚性”单元移动。

如果不带参数调用,该命令会激活瞬态模式 以交互方式调整受影响行的缩进。尽管 此瞬态模式处于活动状态,键入 LEFT 或 RIGHT 向左缩进 和向右,分别为一个空格。您也可以输入 S-LEFT 或 S-RIGHT 向左或向右缩进到下一个制表位(参见 Tab 停)。键入任何其他键将禁用瞬态模式,并恢复 正常编辑。

我没有看到瞬态模式。如何将区域移动到上一个制表位?


Related answer, to un-indent by 4 spaces

【问题讨论】:

  • C-x <tab> 通常绑定到 indent-rigidly ...如果不是,那么也许检查您的键绑定 C-h k 然后 C-x <tab>
  • @donkopotamus C-x <TAB> 很好——不过我正在寻找 de-indent/un-indent/dedent。 C-h k 是一个很好的提示——谢谢。
  • 如果绑定正确,那么C-x <tab> <shift-left>应该与tab-width的前一个倍数有关系。你怎么了?
  • @donkopotamus 我按C-x,释放,然后<tab>,然后释放SHIFT-LEFTARROWKEY。这就是你说的吗?这样做,它似乎没有注意到这应该是同一个命令。它只是将C-x <tab> 部分的区域向右缩进一个字符,然后像shift-left 通常那样突出显示一个字符。
  • 如果你高亮一个区域然后M-x indent-rigidly会发生什么?

标签: emacs indentation


【解决方案1】:

这种瞬态模式的行为是在 Emacs 24.4 中引入的。在这种情况下,提交者运行的是 24.3。

在 Emacs 24.3 上,indent-rigidly 不能向前或向后移动“到最近的制表位”。相反,它只能用于移动给定数量的字符。

例如:

  • 要将区域向左移动 7 个字符,请使用 C-u - 7 C-x <tab>
  • 要将区域向右移动 3 个字符,请使用 C-u 3 C-x <tab>

【讨论】:

  • Emacs 24.3 在我的特殊情况下
  • 哎呀,胖手指了两次!
【解决方案2】:

我认为你的目标也可以通过“矩形运算”来实现。

要将文本块向左移动一个制表位,您只需删除左侧的一列制表符,然后文本块将自动向左移动已删除的长度。

这样做的步骤:

  1. 选择要删除的内容作为区域。请注意,该区域的起点和终点将是矩形的两个顶点。
  2. 发出\C-x r dM-x delete-rectangle

要将文本块向右移动一个制表位,您只需在文本块之前插入一列制表符即可。

  1. 同上一个。但是现在矩形的宽度应该是0(即区域的起点和终点在同一列)。
  2. 发出\C-x r t <TAB>M-x string-rectangle。这里<TAB>是你要插入的内容,可以是其他任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2012-01-02
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多