我正在使用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
答案 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.