在XCode中操作文本,如何移动一行代码

11
在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中完成这个操作吗?


你可以使用Python来执行Applescript的操作 - 可以查看appscript http://appscript.sourceforge.net/ - mmmmmm
4个回答

35

6
您想要做的事情可以通过Xcode的“用户脚本”实现,并且它还提供了一对几乎可以满足您需求的脚本。(我在这里使用的是Xcode 3.2,但我认为这些脚本也存在于3.1中)
请查看/Developer/Library/Xcode/User Scripts/;那里有两个AppleScript,Move Line Up.scpt和Move 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

这些几乎可以达到你的要求,除了它们在选择整行之后; 我不是苹果脚本专家,但你可能想存储所选字符范围。查看Xcode脚本字典(在AppleScript编辑器中,文件->打开字典-> Xcode),以找出可以操作的对象类型。
您可以使用“编辑用户脚本”菜单项将自己的脚本添加到Xcode中,并在该窗口中通过在脚本菜单项旁边的右侧列中双击来为脚本分配快捷键。
您还可以在用户脚本菜单中使用shell脚本(perl,python,bash等),但这些仅处理选择或整个文件,因此可能对于上下移动单个行有点重量级。
在此处查看有关用户脚本的所有文档:http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/XcodeWorkspace/310-User_Scrips/user_scripts.html 希望这可以帮助你!

但是非常复杂。cescofry有答案。 - HenryRootTwo

0

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

我的做法是使用Xcode进行“简单”的编译和调试。当我想要进行大量编码(嗯...文本编辑)时,我会在一个Vim中打开多个文件(不冒犯emacs...vim是我选择的编辑器),并使用所有可用的vim技巧。

当我需要在Windows上进行大量编码时(Visual Studio),我也遵循同样的过程。我只是打开VS进行编译/调试,但我大部分时间都在单独的Vim窗口中进行编码。

在Unix上,我不需要做任何这些事情,因为我只需在Vim中打开文件并从Vim内运行Makefile,直接跳转到错误等(:mak)...

我相信有一些非常聪明的方法可以让Xcode做一些已经在Vim中的事情,让Vim做一些Xcode可以做的事情,但我专注于编码,没有太多时间去玩耍。


1
那是首选的工作方式,但那不是问题所在。 - guns

0
此外,您可以将emacs(或vi、bbedit或ed)连接到xcode,以便它们彼此通信。当您告诉xcode打开一个文件时,它会调用emacsclient等。您甚至可以让emacs告诉xcode在哪里设置断点(我不记得如何做了,但我之前在这里问过一个问题,它非常有效)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接