TextMate 是否有一个捆绑包/插件/等可以跨文件搜索函数声明?

TextMate 是否有一个捆绑包/插件/等可以跨文件搜索函数声明?

许多现代 IDE 都提供了使用简单快捷键或在函数调用时单击鼠标来跳转到函数声明的功能。这是阻止 TextMate 成为我唯一一个统治所有 IDE 的原因。

到目前为止,我发现 TextMate 非常适合 Web 开发和脚本编写,但在其上进行大规模 C++ 或 Java 开发可能会感觉有点不方便。

答案1

以下是如何在 TextMate 中执行此操作(来自谷歌缓存):

许多 IDE 都具有“跳转”到您正在处理的项目中的函数声明的功能。这是在 TextMate 中执行此操作的方法。假设您了解捆绑包,则应将下面的 Bash 脚本放在命令中,并将输出设置为显示为工具提示,然后最终选择所需的组合键。

准备就绪后,只需在将插入符号放在函数上方时按下组合键即可。下面的脚本将遍历 PHP 相关文件以查找声明,然后在适当的行打开 TextMate 文档。当此脚本失败时,将显示提示信息。

FUNC="$TM_CURRENT_WORD"
DIR="$TM_PROJECT_DIRECTORY"
OUTPUT=''

FILES=(`find "$DIR" -type f | egrep '\.(module|inc|php|engine|install)$'`)

#
# Look for a function declaration within a files contents.
#
# <file> <function>
#
function lookup_function {
  local line=`nl -b a "$1" | grep 'function '"$2"'(' | awk '{print $1}'`
  if [[ "$line" -gt 0 ]]; then
    mate "$1" -l "$line"
    exit 0
  fi
}

# Iterate files
for (( i=0; i < ${#FILES[*]}; i++)); do
  file="${FILES[${i}]}"
  lookup_function "$file" "$FUNC"
done

# Nothing found
echo 'Function '${FUNC}' was not found within the current project.'

另外,看看这个:https://web.archive.org/web/20210408114313/http://www.cocoabits.com/TmCodeBrowser/

答案2

我修改了 ghoppe 的脚本以适用于 Python 类和函数定义(运行速度也稍微快一些):

FUNC="$TM_CURRENT_WORD"
DIR="$TM_PROJECT_DIRECTORY"
OUTPUT=''

# Define the class or function definition string that we're looking for.
FUNCDEF='(def|class) '$FUNC

# Find all files that contain FUNCDEF
FILES=(`egrep "$FUNCDEF" $DIR/* -r -l --include=*.py`)

#
# Look for a function declaration within a files contents.
#
# <file>
#
function lookup_function {
    local line=`nl -b a "$1" | egrep "$FUNCDEF" | awk '{print $1}'`
    if [[ "$line" -gt 0 ]]; then
      # echo 'Jumping to --> '$1':'$line
      mate "$1" -l "$line"
      exit 0
    fi
}

# Iterate files
for file in ${FILES[@]}; do
    echo $file
    lookup_function "$file"
done

# Nothing found
echo 'Function '${FUNC}' was not found within the current project.'

答案3

尽管 TextMate 具有词汇格式化(粗体、斜体、颜色等),但它无法真正掌握您在其中输入的实际代码。为了做您想要的更复杂的事情,TextMate 除了格式化之外还需要进行另一种分析,这种分析越来越接近编译器。
据我所知,TextMate 目前不支持此功能。

相关内容