Textmate片段在评论中添加文件名和路径?

时间:2010-07-11 03:13:15

标签: regex codeigniter textmate code-snippets

我正在使用Textmate中的现有代码段来减少创建控制器和模型的重复次数。该代码段效果很好,但我很乐意在每个文件的末尾添加注释。例如:

/* End of file filename.php */  
/* Location: ./system/application/controllers/filename.php */

第一行很简单:

/* End of file ${TM_FILENAME} */

使用TM_FILEPATH变量,第二部分几乎一样容易:

/* Location: ./${TM_FILEPATH} */

问题是,我不希望返回整个文件路径,只有'系统'(如果存在)之后的任何内容,或者如果没有则返回'应用程序'。例如,使用TM_FILEPATH返回:

/* Location: ./path/from/root/system/application/controllers/filename.php */
-or-
/* Location: ./path/from/root/application/controllers/filename.php */

......我想要的时候:

/* Location: ./system/application/controllers/filename.php */
-or-
/* Location: ./application/controllers/filename.php */

我认为这将是一些正则表达式的诡计,但我不知道如何。有什么建议吗?


更新:我刚刚找到TextMate变量TM_PROJECT_DIRECTORY,其中包含我想要从TM_FILEPATH中删除的信息,如果这样可以更容易。

所以,TM_FILEPATH产生了这个:

/path/from/root/system/application/controllers/filename.php

TM_PROJECT_DIRECTORY产生了这个:

/path/from/root

3 个答案:

答案 0 :(得分:0)

我不知道Textmate,但你可以使用CI常量FCPATH吗?这是文件的完整服务器路径。

答案 1 :(得分:0)

我为控制器和模型使用了两个不同的片段(因为语法类似,但有点不同; I.E:每个控制器都需要一个索引函数,但模型不需要)。我只是硬编码如下......

控制器:

/* Location: ./application/controllers/${TM_FILENAME} */

型号:

/* Location: ./application/models/${TM_FILENAME} */

由于我始终将应用程序文件夹拉出系统文件夹,并将系统文件夹放在不同的目录中,因此效果很好。我还在应用程序上添加了一个tabstop,以防我重命名应用程序目录。

@TM_PROJECT_DIRECTORY:我认为这只有在您将文件作为项目打开时才有效。我使用基于Textmate的电子文本编辑器,所以可能会有所不同。

希望这有帮助。

答案 2 :(得分:0)

这是我提出的解决方案。我不知道这是不是最好的方式,但它接缝工作:

/* End of file ${TM_FILENAME} */
/* Location: ${TM_FILEPATH/(.*?)(\/system)?(\/application.*)/(?1:).$2$3/} */

我会按照我的理解分解它;)

${TM_FILEPATH      - The 'source' string TextMate variable
/                  - Indicates next chars are 'pattern'
(.*?)              - Group 1: Zero or more of any character. ? Makes it non-greedy
(\/system)?        - Group 2: /system but it's optional because of the ?
(\/application.*)  - Group 3: /application and any other characters
/                  - Indicates next chars are 'replacement'
(?1:).$2$3         - If Group 1 is found, replace with blank, then a dot, Group 2, Group 3.
/                  - Indicates regex is finished.
}                  - Closes off TextMate variable.