TextMate:轻量级代码编辑器

2022-10-31 11:22:50 浏览数 (1)

  • 需求分析

  • TextMate
    • 代码模板
    • 运行脚本

Author: 颖奇L’Amore

Blog: www.gem-love.com


MacOS高效使用文章合集:here

需求分析▸

我基本上写代码分三种情况:

  1. 写个大项目,用框架之类的,会选择jetbrains公司的IDE,比如IDEA。但是太笨重
  2. 写脚本等,或者写简单的html页面(复杂的不会),一般是用vscode
  3. 对某些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导致无法使用,需要修改,这是我修改后的版本:

代码语言:javascript复制
<span class="hljs-meta">#!/bin/bash</span>
[[ -z <span class="hljs-string">"<span class="hljs-variable">$TM_FILEPATH</span>"</span> ]] &amp;&amp; TM_TMPFILE=$(mktemp -t pythonInTerm)
: <span class="hljs-string">"<span class="hljs-variable">${TM_FILEPATH:=$TM_TMPFILE}</span>"</span>; cat &gt;<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 &lt;&lt;<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 &lt;&lt;<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 &lt;&lt;<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 &lt;&lt;- <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>

0 人点赞