- 需求分析
- TextMate
- 代码模板
- 运行脚本
Author: 颖奇L’Amore
Blog: www.gem-love.com
MacOS高效使用文章合集:here
需求分析▸
我基本上写代码分三种情况:
- 写个大项目,用框架之类的,会选择jetbrains公司的IDE,比如IDEA。但是太笨重
- 写脚本等,或者写简单的html页面(复杂的不会),一般是用vscode
- 对某些txt编辑一下,或者随手跑一个脚本,或者随便写两行代码,或者临时打开个编辑器记录几句话,这种时候vscode感觉还是过于笨重(尽管vscode已经非常轻量了),需要超级轻量的编辑器。
所以这篇文章主要分享一下我用的轻量级编辑器TextMate。以前一直用Sublime Text,用了三年多,也还可以,但是有时候有bug,于是终于在最近被我淘汰了。
TextMate▸
关于基本使用都默认就可以了,包括有一些转大小写等快捷键功能可以自行看一下说明。 这里主要介绍如何使用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>