Author: 颖奇L’Amore
Blog: www.gem-love.com
MacOS高效使用文章合集:here
我基本上写代码分三种情况:
所以这篇文章主要分享一下我用的轻量级编辑器TextMate。以前一直用Sublime Text,用了三年多,也还可以,但是有时候有bug,于是终于在最近被我淘汰了。
关于基本使用都默认就可以了,包括有一些转大小写等快捷键功能可以自行看一下说明。 这里主要介绍如何使用TextMate的Bundle功能,以python为例
进入Edit Bundle
在这个红框Insert内相当于是代码模板(下面的idioms等也是),可以添加一些自己常用的代码模板,不过我一般也不用它写复杂的程序,这里就简单编辑一下头的模板
输入py3摁tab即可自动填充代码模板:
之前用sublime时直接打开一个脚本然后cmd+B就直接运行了,TextMate也可以一个快捷键直接运行
首先是Run Script,是在TextMate中运行脚本输出结果,但是我不能直接使用,提示python command not found
于是我手工修改了python的路径为我的python3的绝对路径:
cmd + R 即可运行
不过我不喜欢这个内置的输出,因为如果是长时间跑脚本的话,他的输出会有延迟,还是在iTerm中直接运行该py文件比较方便,这时候就要用Run Script(Terminal)。但是由于它是用AppleScript调用iTerm,而AppleScript使用了一种过时的表达tell the current terminal
导致无法使用,需要修改,这是我修改后的版本:
<span class="hljs-meta">#!/bin/bash</span>
[[ -z <span class="hljs-string">"<span class="hljs-variable">$TM_FILEPATH</span>"</span> ]] && TM_TMPFILE=$(mktemp -t pythonInTerm)
: <span class="hljs-string">"<span class="hljs-variable">${TM_FILEPATH:=$TM_TMPFILE}</span>"</span>; cat ><span class="hljs-string">"<span class="hljs-variable">$TM_FILEPATH</span>"</span>
<span class="hljs-comment"># run script using either Terminal.app or iTerm.app</span>
<span class="hljs-comment"># if iTerm is open or if TM_TERMINAL is set to iTerm then use iTerm</span>
<span class="hljs-comment"># otherwise default to Terminal.app since that is standard.</span>
<span class="hljs-comment"># 这里将自带终端改成了iTerm</span>
TP=<span class="hljs-variable">${TM_TERMINAL:=iTerm}</span>
TPY=<span class="hljs-variable">${TM_PYTHON:-python}</span>
<span class="hljs-function"><span class="hljs-title">esc</span></span> () {
STR=<span class="hljs-string">"<span class="hljs-variable">$1</span>"</span> ruby18 <<<span class="hljs-string">"RUBY"</span>
str = ENV[<span class="hljs-string">'STR'</span>]
str = str.gsub(/<span class="hljs-string">'/, "'</span>\\\\<span class="hljs-string">''</span><span class="hljs-string">")</span>
<span class="hljs-string"> str = str.gsub(/[\\"</span>]/, <span class="hljs-string">'\\\\\\0'</span>)
<span class="hljs-built_in">print</span> <span class="hljs-string">"'#{str}'"</span>
RUBY
}
<span class="hljs-function"><span class="hljs-title">iTerm_running</span></span> () {
ruby <<<span class="hljs-string">"RUBY"</span>
all = `ps -U <span class="hljs-string">"<span class="hljs-variable">$USER</span>"</span> -o ucomm`
split = all.split(<span class="hljs-string">"\n"</span>)
<span class="hljs-keyword">if</span> split.find { |cmd| <span class="hljs-string">'iTerm'</span> == cmd.strip }
STDOUT.write 0
<span class="hljs-keyword">else</span>
STDOUT.write 1
end
RUBY
}
<span class="hljs-comment"># 主要改了这个地方的AppleScript</span>
<span class="hljs-comment"># 然后删除临时文件由rm -rf改成了移至垃圾桶,避免误删文件导致文件丢失(一般不会生成临时文件所以用了个if做判断)</span>
<span class="hljs-keyword">if</span> [ <span class="hljs-string">"<span class="hljs-variable">$TP</span>"</span> == iTerm ] || [ $(iTerm_running) == 0 ]; <span class="hljs-keyword">then</span>
osascript <<<span class="hljs-string">END</span>
<span class="hljs-string"> tell application "iTerm"</span>
<span class="hljs-string"> activate</span>
<span class="hljs-string"> set newWindow to (create window with default profile)</span>
<span class="hljs-string"> tell newWindow</span>
<span class="hljs-string"> tell current session</span>
<span class="hljs-string"> write text "clear; cd $(esc "${TM_DIRECTORY}"); /usr/bin/python3 $(esc "${TM_FILEPATH}"); if [ -f $(esc "${TM_TMPFILE}") ]; then mv $(esc "${TM_TMPFILE}") ~/.Trash; fi"</span>
<span class="hljs-string"> end tell</span>
<span class="hljs-string"> end tell</span>
<span class="hljs-string"> end tell</span>
<span class="hljs-string">END</span>
<span class="hljs-keyword">else</span>
osascript <<- <span class="hljs-string">APPLESCRIPT</span>
<span class="hljs-string"> tell app "Terminal"</span>
<span class="hljs-string"> launch</span>
<span class="hljs-string"> activate</span>
<span class="hljs-string"> do script "clear; cd $(esc "${TM_DIRECTORY}"); /usr/bin/python3 $(esc "${TM_FILEPATH}");if [ -f $(esc "${TM_TMPFILE}") ]; then mv $(esc "${TM_TMPFILE}") ~/.Trash; fi"</span>
<span class="hljs-string"> set position of first window to { 100, 100 }</span>
<span class="hljs-string"> end tell</span>
<span class="hljs-string">APPLESCRIPT</span>
<span class="hljs-keyword">fi</span>