在XCode中操作文本,移动一行

时间:2009-09-04 16:15:42

标签: xcode metaprogramming

在emacs中,我有各种操作文本的功能。现在我正在使用xcode,我想我可以将emacs作为默认编辑器,但我想浏览obj-c对象等等,所以我宁愿为xcode实现我最常用的文本操作命令。

首先在我的列表中,我想要一个命令,将当前行的文本向上/向下移动一行,将光标保持在当前行。

在emacs中,这是:

(defun move-one-line-downward ()
  "Move current line downward once."
  (interactive)
  (forward-line)
  (transpose-lines 1)
  (forward-line -1))

如果我能在Python中编写一个可以在XCode中执行相同操作的脚本,我会感到最开心,但据我所知,我需要与AppleScript交谈以实现此目的。

有人可以告诉我如何使用XCode执行此操作吗?

4 个答案:

答案 0 :(得分:32)

Xcode 4有一组新的命令用于移动光标所在的行或选定的文本command + option + []

⌥⌘[⌥⌘]

http://developer.apple.com/library/mac/#documentation/IDEs/Conceptual/xcode_help-command_shortcuts/MenuCommands/MenuCommands014.html

答案 1 :(得分:6)

你想要做的事情可以通过Xcode的“用户脚本”来实现 - 它有助于提供一对几乎可以满足您需求的脚本。 (我在这里使用Xcode 3.2,但我认为这些也在3.1)

查看/Developer/Library/Xcode/User Scripts/;那里有两个苹果脚本Move Line Up.scptMove Line Down.scpt。这是Move Line Up中的内容:

(*
To edit this script, choose Save As... and save it in your home directory, then re-add it to the User Scripts list.
*)
using terms from application "Xcode"
    tell first text document
        set {startLine, endLine} to selected paragraph range

        if startLine > 1 then
            set theText to (paragraphs startLine through endLine)
            set theText to (theText as string)
            delete (paragraphs startLine through endLine)
            make new paragraph at beginning of paragraph (startLine - 1) with data theText
            set selected paragraph range to {startLine - 1, endLine - 1}
        else
            beep 1
        end if
    end tell
end using terms from

这些几乎可以做你想要的,除了他们之后选择整行;我不是苹果专家,但你可能想存储selected character range。查看Xcode脚本字典(在AppleScript编辑器中,文件 - >打开字典 - > Xcode),找出可以操作的对象类型。

您可以使用脚本菜单中的“编辑用户脚本”菜单项将自己的脚本添加到Xcode;并通过双击脚本菜单项条目旁边的右侧列,为该窗口中的脚本指定快捷键。

您还可以在“用户脚本”菜单中使用shell脚本(perl,python,bash等),但这些脚本只处理选择或整个文件,因此对于向上或向下移动单行可能会有点重量级。

在此处查看有关用户脚本的所有文档:http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/XcodeWorkspace/310-User_Scrips/user_scripts.html

我希望这有帮助!

答案 2 :(得分:0)

我认为你的问题比Xcode / emacs更通用。大多数IDE都不能做编辑可以做的事情,反之亦然。

我所做的是将Xcode用于“简单”的东西并编译/调试。当我想做很多编码(hm ...文本编辑)时,我在一个Vim中打开多个文件(对emacs没有冒犯... vim是我的首选编辑器)并使用所有可用的vim技巧。

当我需要在Windows(Visual Studio)上进行大量编码时,我遵循相同的过程。我打开VS仅用于编译/调试,但我在单独的Vim窗口中进行了大部分编码。

我不需要在Unix上执行任何操作,因为我只是在Vim中打开文件并从Vim中运行Makefile,直接跳转到错误等等(:mak)......

我确信有一些非常聪明的东西可以让Xcode做已经在Vim和Vim中的东西来做Xcode可以做的事情,但是我专注于编码,所以没有多少时间玩。

答案 3 :(得分:0)

此外,您可以将emacs(或vi,或bbedit,或我想象的ed)连接到xcode,以便它们可以相互通信。当你告诉xcode打开一个文件时,它会调用emacsclient等。你甚至可以通过emacs告诉xcode在哪里放置一个断点(我不记得怎么样,但我在这里问了一个问题,它的效果很好)