GNU Global基础部分翻译
原文链接:https://www.gnu.org/software/global/globaldoc_toc.html
目录
- Overview of this tool
- Command Line
- Various Applications
- Other topics
- Command References
- global - print locations of given symbols
- gtags - create tag files for global
- htags - generate a hypertext from a set of source files
- htags-server - a private web/cgi server fot htgas
- gozilla - force firefox to display specified part of a source file
- gtags-cscope - interactively examine a C program
- globash - a special shell of Global using GNU bash
- gtags.conf - configuration data for GNU Global
Overview of this tool
What is gnu global
- GNU Global是一个源代码标签系统,
- 它可以在不同的环境中以相同的方式工作,例如Emacs编辑器、Vi编辑器、Less查看器、Bash shell、各种web浏览器等。
- 您可以使用该系统在源代码中找到诸如函数、宏、结构体和类等符号的位置,并轻松地移动到那里。
- 对于一个包含许多子目录、许多#ifdef和许多main()函数的大型项目,它非常有用。
- 它类似于ctags或etags,但不同于他们之处在于,gtags是独立于编辑器的。
Concept of project
- GNU Global可以将包含子目录的源代码树视为项目。
- 在项目的任何地方,都可以使用该高性能标签数据库。
- 您不需要指定数据库的位置,因为global(1)会自己定位它。
- 由于这个特性,您可以在一个项目中自由移动,也可以在许多项目中自由进出。
Features
GNU Global具有以下特性:
-
支持C, Yacc, Java, PHP4和汇编。
-
在诸如以下不同的环境中,使用同样的工作:
- Shell命令行
- Bash shell
- Vi编辑器(Nvi, Elvis, vim)
- less
- Emacs编辑器(Emacs, Mule, Xemacs)
- Web浏览器
- Doxygen文档系统
-
快速查找指定符号的位置。
-
不仅能定位标签定义,而且定位对标签的引用。
-
允许复制标签。
-
定位与指定模式匹配的路径。
-
默认为分级搜索。
-
不仅在源项目中搜索,而且在库项目中搜索。
-
生成补全列表。
-
支持多种输出格式。
-
允许自定义要生成tag的一组候选文件。
-
支持POSIX 1003.2正则表达式。
-
支持idutils作为外部搜索引擎。
-
tag文件与机器架构无关。
-
支持标签文件的增量更新。
-
可以使用解析器插件来处理新语言。
-
支持使用gtags.conf进行定制化配置。
-
生成源代码的hypertext。
-
支持compact格式,节省磁盘空间。
-
支持客户端/服务器场景(TRAMP可用时)。
-
忽略二进制文件,点文件和指定文件。
-
包括cscope兼容程序(gtags-cscope)。
-
包括类似grep的命令(-g命令)。
-
支持类似grep的符号高亮显示。
Command Line
您可以从shell命令行使用标签功能。与其他标签系统相比,这是Global的一大优点。
Preparation
在开始之前,请阅读FAQ(常见问题)文件。
$ more /usr/local/share/gtags/FAQ
首先,您必须在源码树的根目录,执行gtags。例如,如果你想在FreeBSD中浏览Vi编辑器的源代码,请切换到源码目录并调用gtags(1)。
$ cd /usr/src/usr.bin/vi
$ gtags
Gtags遍历子目录,从源文件中提取符号,并在当前目录中创建三个标记文件。在此之后,当前目录下的所有文件和目录都被视为一个工程。
$ ls G*
GPATH GRTAGS GTAGS
- GTAGS definition database
- GRTAGS reference database
- GPATH path name database
您应该为标记文件准备相当大的磁盘空间。例如,Linux-2.6.32源代码需要的磁盘空间如下:
source code(Linux-2.6.32) 390MB GPATH 6MB GTAGS 81MB GRTAGS 202MB ------------------------------------- total of tag files 289MB
Basic Usage
考虑以下源码树:
/home/user/
|
|-ROOT/ <- the root of source tree (GTAGS,GRTAGS,...)
|
|- README ..... +---------------+
| |The function of|
| +---------------+
|- DIR1/
| |
| |- fileA.c ..... +---------------+
| | |main(){ |
| | | func1();|
| | | func2();|
| | |} |
| | +---------------+
| |
| |- fileB.c ..... +---------------+
| |func1(){ ... } |
| +---------------+
|- DIR2/
|
|- fileC.c ..... +---------------+
|#ifdef X |
|func2(){ i++; }|
|#else |
|func2(){ i--; }|
|#endif |
|func3(){ |
| func1();|
|} |
+---------------+
-
一旦您在项目的根目录中创建了tag文件,您就可以从项目的任何地方调用
global
命令。默认情况下,您将获得所定位文件的相对路径。$ cd /home/user/ROOT $ global func1 DIR1/fileB.c # func1() is defined in fileB.c $ cd DIR1 $ global func1 fileB.c # relative path from DIR1 $ cd ../DIR2 $ global func1 ../DIR1/fileB.c # relative path from DIR2
-
只有在项目目录中才可以使用
global
。如果你不在任何项目中,它会显示如下错误信息:$ cd /home/user $ global func1 global: GTAGS not found.
-
-
-r
选项搜索函数的引用$ global -r func2 ../DIR1/fileA.c # func2() is referred from fileA.c
-
支持使用POSIX正则表达式
$ cd /home/user/ROOT $ global 'func[1-3]' DIR1/fileB.c # func1, func2 and func3 are matched DIR2/fileC.c
-
-x
选项显示详细信息,类似于ctags
命令的-x
选项$ global func2 DIR2/fileC.c $ global -x func2 func2 2 DIR2/fileC.c func2(){ i++; } func2 4 DIR2/fileC.c func2(){ i--; }
-
-a
选项返回绝对路径名$ global -a func1 /home/user/ROOT/DIR1/fileB.c
-
-s
选项定位在GTAGS
中未定义的符号$ global -xs X X 1 DIR2/fileC.c #ifdef X
-
-g
选项返回有指定pattern的代码行$ global -xg '#ifdef' #ifdef 1 DIR2/fileC.c #ifdef X
它类似于
egrep
,但对于源代码阅读来说要方便得多,因为您可以搜索整个项目,而且只在源文件中搜索。此外,您可以使用以下选项:
-
-O
:仅在文本文件中搜索 -
-o
:在源文件和文本文件中搜索 -
-l
:在当前路径下搜索 -
-e
,-G
,-i
选项也都可用,用法与egrep
选项相同 -
--result=grep
:指定搜索结果为grep风格
-
-
-P
列出包含指定pattern的路径名$ global -P fileB DIR1/fileB.c $ global -P '1/' DIR1/fileA.c DIR1/fileB.c $ global -P '\.c$' DIR1/fileA.c DIR1/fileB.c DIR2/fileC.c
-
-f
选项列出指定文件的tags列表$ global -f DIR2/fileC.c func2 2 DIR2/fileC.c func2(){ i++; } func2 4 DIR2/fileC.c func2(){ i--; } func3 6 DIR2/fileC.c func3(){
Applied Usage
-
您可以自定义要生成tag的一组候选文件
$ find . -type f -print >/tmp/list # make a file set $ vi /tmp/list # customize the file set $ gtags -f /tmp/list
-
如果源文件位于只读设备(如CDROM)上,则不能在源代码树的根目录上创建tag文件。
-
此时,您可以使用
GTAGSROOT
环境变量在其他地方创建标记文件。$ mkdir /var/dbpath $ cd /cdrom/src # the root of source tree $ gtags /var/dbpath # make tag files in /var/dbpath $ export GTAGSROOT=`pwd` $ export GTAGSDBPATH=/var/dbpath $ global func
-
还有另一种方法。由于
global
也会在/usr/obj + <当前目录>
中查找tag文件,你可以像下面这样设置。$ cd /cdrom/src # the root of source tree $ mkdir -p /usr/obj/cdrom/src $ gtags /usr/obj/cdrom/src # make tag files in /usr/obj/cdrom/src $ global func
-
-
如果希望定位source tree中没有定义的符号,那么可以使用
GTAGSLIBPATH
环境变量指定库目录。- 您应该在
GTAGSLIBPATH
中的每个目录执行gtags
。如果没有找到GTAGS, global将忽略这些目录。
$ pwd /develop/src/mh # this is a source project $ gtags $ ls G*TAGS GRTAGS GTAGS $ global mhl uip/mhlsbr.c # mhl() is found $ global strlen # strlen() is not found $ (cd /usr/src/lib; gtags) # library source $ (cd /usr/src/sys; gtags) # kernel source $ export GTAGSLIBPATH=/usr/src/lib:/usr/src/sys $ global strlen ../../../usr/src/lib/libc/string/strlen.c # found in library $ global access ../../../usr/src/sys/kern/vfs_syscalls.c # found in kernel
-
或者,你可以用一种更直接的方法来做同样的事情。在下面的示例中,我们将系统库和内核视为项目的一部分。
$ ln -s /usr/src/lib . $ ln -s /usr/src/sys . $ gtags $ global strlen lib/libc/string/strlen.c $ global access sys/kern/vfs_syscalls.c
- 您应该在
-
如果忘记了符号名称,可以使用
-c (complete)
命令$ global -c kmem # maybe k..k.. kmem.. kmem_alloc kmem_alloc_pageable kmem_alloc_wait kmem_free kmem_free_wakeup kmem_init kmem_malloc kmem_suballoc # This is what I need! $ global kmem_suballoc ../vm/vm_kern.c
-
可以在shell补全命令中使用
-c
选项# In Bash: $ funcs() > { > local cur > cur=${COMP_WORDS[COMP_CWORD]} > COMPREPLY=(`global -c $cur`) > } $ complete -F funcs global $ global kmem_TABTAB kmem_alloc kmem_alloc_wait kmem_init kmem_alloc_nofault kmem_free kmem_malloc kmem_alloc_pageable kmem_free_wakeup kmem_suballoc $ global kmem_sTAB $ global kmem_suballoc ../vm/vm_kern.c
-
您可以通过键入一个命令,来编辑所有具有指定tag的文件。例如:
$ vi `global func1` # edit fileB.c
-
如果你想按顺序浏览多个文件,请执行以下操作
$ global -xr fork | awk '{printf "view +%s %s\n",$2,$3}' view +650 ../dev/aic7xxx/aic7xxx_asm.c view +250 ibcs2/ibcs2_misc.c view +401 linux/linux_misc.c view +310 ../kern/init_main.c view +318 ../kern/init_main.c view +336 ../kern/init_main.c view +351 ../kern/init_main.c $ !! | sh # from now on, go to next tag with ’ZZ’.
Various Applications
Global facility for Bash
Features
-
可以使用类似vi的tag stack
-
可以使用类似emacs的tag名称补全
-
自动调用编辑器。
-
可以使用tag标记工具
-
你可以通过cookie工具管理一个目录列表。
Preparation
首先,安装好global
程序。然后可以调用globash
命令。
$ globash
第一次启动时,会看到以下消息。
# GloBash needs a working directory. Do you create '/home/you/.globash'? ([y]/n)
按ENTER键,你会看到如下提示:
# [/usr/src/sys]/kern _
该提示说明当前目录为’ /usr/src/sys/kern ‘,项目的根目录为’ /usr/src/sys '。tag和marker只在项目中有效。
当你试图离开项目时,globash
警告如下:
[/usr/src/sys] cd ..
You are going to get out of the current project.
Tag stack and marker will be removed. Sure? ([y]/n)_
如果你的答案是y RET或只是RET,那么标签堆栈和marker(稍后描述)将被删除。
如果你需要帮助,请键入ghelp
。
Usage
-
大多数global的命令字符都可以作为命令使用。
如果没有指定参数,则使用最新的参数。
[/usr/src/sys] x fork <- (global -x fork) > 1 fork 94 kern/kern_fork.c fork(p, uap) [/usr/src/sys] r <- (global -xr fork) > 1 fork 85 alpha/linux/linux_machdep.c 2 fork 184 i386/linux/linux_machdep.c [/usr/src/sys] s lbolt <- (global -xs lbolt) > 1 lbolt 1210 i386/isa/wd_cd.c tsleep((cad 2 lbolt 1211 i386/isa/wd_cd.c tsleep((cad 3 lbolt 709 i386/isa/wfd.c tsleep ((caddr ... [/usr/src/sys] g <- (global -xg lbolt) > 1 lbolt 1210 i386/isa/wd_cd.c tsleep((cad ... [/usr/src/sys] P init <- (global -xP init) > 1 path 1 dev/hea/eni_init.c 2 path 1 dev/hfa/fore_init.c 3 path 1 i386/i386/initcpu.c 4 path 1 kern/init_main.c 5 path 1 kern/init_sysent.c 6 path 1 kern/vfs_init.c 7 path 1 vm/vm_init.c [/usr/src/sys] _
-
输入补全可用。对于每个命令,都会应用适当的补全
[/usr/src/sys] x kmem_TABTAB kmem_alloc kmem_free kmem_malloc kmem_alloc_nofault kmem_free_wakeup kmem_object kmem_alloc_wait kmem_init kmem_suballoc [/usr/src/sys] x kmem_sTAB [/usr/src/sys] x kmem_suballoc
-
可以通过
show
命令选择tag。[/usr/src/sys] x main > 1 main 70 alpha/alpha/gensetdefs.c main(in 2 main 1500 alpha/alpha/ieee_float.c main(i 3 main 227 boot/alpha/boot1/boot1.c main() .... [/usr/src/sys] show 3 # 默认使用vi打开该tag (Load editor and show boot/alpha/boot1/boot1.c at line 227.)
默认编辑器为vi(1)。可以通过
EDITOR
环境变量静态指定,也可以通过选项临时指定。[/usr/src/sys] show -e 3 # emacs打开 (Preloaded emacs show boot/alpha/boot1/boot1.c at line 227.) [/usr/src/sys] show -l 3 # less打开 (Load less and show boot/alpha/boot1/boot1.c at line 227.) [/usr/src/sys] show -g 3 # firefox打开 (Preloaded firefox show boot/alpha/boot1/boot1.c at line 227.)
您还可以使用以下命令(以缩写形式):
list (l) # print tag list. first # go to the first tag. last # go to the last tag. next (n) # go to the next tag. prev (p) # go to the previous tag. show N (1,2,3,..,999) # go to Nth tag
-
您可以使用类似vi的tag stack。您可以通过pop或CTRL-T命令返回到之前的标记列表。
使用
tags
命令查看当前tag[/usr/src/sys] x main > 1 main 70 alpha/alpha/gensetdefs.c main(in 2 main 1500 alpha/alpha/ieee_float.c main(i 3 main 227 boot/alpha/boot1/boot1.c main() .... [/usr/src/sys] show 3 (Load editor and show boot/alpha/boot1/boot1.c at line 227.) [/usr/src/sys] x fork <- push new tag on the tag stack. > 1 fork 94 kern/kern_fork.c fork(p, uap) [/usr/src/sys] pop <- pop tag stack. [/usr/src/sys] show (Load editor and show boot/alpha/boot1/boot1.c at line 227.)
-
使用
mark
命令记忆tagsmarked标签在您退出当前项目或退出当前bash会话之前都是有效的。
[/usr/src/sys] x fork > 1 fork 94 kern/kern_fork.c fork(p, uap) [/usr/src/sys] mark [/usr/src/sys] x main > 1 main 70 alpha/alpha/gensetdefs.c main(in 2 main 1500 alpha/alpha/ieee_float.c main(i 3 main 227 boot/alpha/boot1/boot1.c main() .... [/usr/src/sys] mark -l <- show marker list. 1 fork 94 kern/kern_fork.c fork(p, uap) [/usr/src/sys] mark 1 <- select a marker. (Load editor and show kern/kern_fork.c at line 94.) [/usr/src/sys] list > 1 main 70 alpha/alpha/gensetdefs.c main(in 2 main 1500 alpha/alpha/ieee_float.c main(i 3 main 227 boot/alpha/boot1/boot1.c main() ....
-
使用
cookie
命令记忆目录,并使用wrap
命令返回到这些记录的目录[/usr/src/sys] cookie <- drop a cookie. [/usr/src/sys] cd kern [/usr/src/sys]/kern cookie <- drop a cookie again. [/usr/src/sys]/kern cd ../i386 [/usr/src/sys]/i386 cookie -l <- show cookie list. 1 /usr/src/sys/kern 2 /usr/src/sys [/usr/src/sys]/i386 warp 2 <- warp to the selected cookie. [/usr/src/sys] _
Less using Global
Nvi-1.81.5 using Global
Elivs using Global
Vim using Global
在Vim 6.2或更高版本中,您可以使用gtags.vim脚本。
Features
-
您可以在Vim中使用Global的大部分功能。
-
智能识别当前
token
及其类型。 -
可以使用特殊字符
%
、#
和输入补全。
遗憾的是,tag stack功能不可用。如果您想使用该工具,请尝试使用gtags-cscope.vim
。
Preparation
# 将gtags.vim拷贝到你的插件目录下
# 以下只是一种示例
$ cp /usr/local/share/gtags/gtags.vim $HOME/.vim/plugin
Usage
-
跳转到
main
:Gtags main
-
Vim执行
global
,解析输出,在quickfix窗口中列出定位到的tags并加载第一个条目。 -
quickfix窗口:
gozilla/gozilla.c|200| main(int argc, char **argv) gtags-cscope/gtags-cscope.c|124| main(int argc, char **argv) gtags-parser/asm_scan.c|2056| int main() gtags-parser/gctags.c|157| main(int argc, char **argv) gtags-parser/php.c|2116| int main() gtags/gtags.c|152| main(int argc, char **argv) [Quickfix List]
-
quickfix窗口命令
:cn # go to the next entry. :cp # go to the previous entry. :ccN # go to the N’th entry. :cl # list all entries.
-
quickfix窗口帮助
:h quickfix
-
建议的按键映射
map <C-n> :cn<CR> map <C-p> :cp<CR>
-
-
查找引用
:Gtags -r func1
-
要定位GTAGS中未定义的符号,请尝试以下操作
2021.11.27 - 翻译吐槽,这玩意有啥用😒
:Gtags -s lbolt
-
要定位字符串,尝试以下操作
:Gtags -g int argc :Gtags -g "root" :Gtags -ge -C <- locate ’-C’
-
要获取指定文件中的tag list,使用
-f
选项。:Gtags -f main.c <- locate tags in main.c
如果正在编辑main.c本身,可以使用’ % '代替。
:Gtags -f % <- locate tags in main.c
-
支持使用POSIX正则表达式
:Gtags ^put_ <- locate tags starting with ’put_’ :Gtags -g fseek(.*SEEK_SET) <- locate fseek() using SEEK_SET
-
支持输入补全
在命令行中,输入一些字符后按
CTRL-D
, Vim将显示一个以字符串开头的标记名称列表。按TAB键,Vim将完成标签名。:Gtags fuTAB :Gtags func1 <- ’nc1’ is appended by vim
-
您可以浏览路径包含指定pattern的文件。
:Gtags -P /vm/ <- under vm/ directory :Gtags -P \.h$ <- all include files :Gtags -P init <- path including ’init’
-
除了
-c -n -p -q -u -v
和所有长名称选项外,您可以使用global的所有选项。它们被原样发送到global。:Gtags -gi paTtern <- matches both ’PATTERN’ and ’pattern’ :Gtags -POi make <- matches Makefile but not makeit.c
-
GtagsCursor
命令显示当前token的定义或引用。如果当前token的上下文是一个定义,那么它等价于
:Gtags -r current-token
,如果它是对某些定义的引用,那么它等价于:Gtags current-token
;否则它等价于:Gtags -s current-token
:GtagsCursor
建议的按键映射:
map <C-\>^] :GtagsCursor<CR>
-
如果您有一个由
htags
生成的超文本,那么您可以在您的浏览器中显示源代码的相同部分。让我们加载firefox并尝试:Gozilla
-
打开vim并跳转到main函数
$ vim '+Gtags main'
Extended Emacs using Global
Gtags-cscope
你也可以使用cscope
作为GNU global的客户端。Global包中包含一个名为gtags-cscope
的命令,它是cscope
的一个移植版本,也就是说,它本身就是cscope,只是它使用Global而不是cscope作为搜索引擎。
$ gtags-cscope
可以在vim编辑器中使用它的功能,按照以下方式在命令模式中输入:
:set csprg=gtags-cscope
:cs add GTAGS
-
然后,您可以在Vim编辑器中使用内置的
cs find
命令。 -
虽然欺骗并不完美(
cs find d
没有实现),但这种方法可能比gtags更方便。- 您可以使用vim的tag stack工具。
Hypertext generator
Doxygen using Global
Other topics
How to configure Global
您可以使用配置文件自定义Global。
$ cp gtags.conf /etc/gtags.conf # system wide config file.
$ vi /etc/gtags.conf
$ cp gtags.conf $HOME/.globalrc # personal config file.
$ vi $HOME/.globalrc
- 如果
$HOME/.globalrc
文件存在,则global使用它; - 否则如果
/etc/gtags.conf
存在,则global使用; - 否则使用默认值。
- conf的格式类似于termcap(5)。默认情况下,使用’ default '目标。
Plug-in parser
-
您可以为gtags(1)编写一个新的解析器。
-
命令层插件解析器被取消。请编写函数层插件解析器以代替。
-
请参阅plugin-factory/来发现函数层插件解析器。
-
您也可以使用Universal ctag作为插件解析器。
# Installation of Global # It assumed that ctags command is installed in '/usr/local/bin'. $ ./configure --with-universal-ctags=/usr/local/bin/ctags $ make $ sudo make install # Executing of gtags # It assumed that Global is installed in '/usr/local'. $ export GTAGSCONF=/usr/local/share/gtags/gtags.conf $ export GTAGSLABEL=new-ctags $ gtags # gtags invokes Universal Ctags internally
Incremental updating
修改一些源文件时,不需要重新创建整个标记文件。相反,您可以使用增量更新工具(-u选项)。
$ gtags
$ cd kernel
$ vi user.c # modify user.c
...
:wq
$ global -vu # -v means verbose
[Sat May 29 00:31:41 JST 2010] Gtags started.
Tag found in '/usr/local/src/linux-2.6.32'.
Incremental updating.
[Sat May 29 00:31:43 JST 2010] Updating 'GTAGS' and 'GRTAGS'.
[1/1] deleting tags of kernel/user.c
[1/1] extracting tags of kernel/user.c
Global databases have been modified.
[Sat May 29 00:31:51 JST 2010] Done.
$ global -vu # try again
[Sat May 29 00:33:16 JST 2010] Gtags started.
Tag found in '/usr/local/src/linux-2.6.32'.
Incremental updating.
Global databases are up to date. # do nothing
[Sat May 29 00:33:19 JST 2010] Done.
Command References
global - print locations of given symbols
SYNOPSIS
global [-adEFGilMnNqrstTvx][-S dir][-e] pattern
global -c[dFiIMoOPrsT] prefix
global -f[adlnqrstvx][-L file-list][-S dir] files
global -g[aEGilMnoOqtvVx][-L file-list][-S dir][-e] pattern [files]
global -I[ailMnqtvx][-S dir][-e] pattern
global -P[aEGilMnoOqtvVx][-S dir][-e] pattern
global -p[qrv]
global -u[qv]
Examples
$ ls -F
Makefile src/ lib/
$ gtags
$ ls G*
GPATH GRTAGS GTAGS
$ global main
src/main.c
$ (cd src; global main)
main.c
$ global -x main
main 10 src/main.c main (argc, argv) {
$ global -f src/main.c
main 10 src/main.c main (argc, argv) {
func1 55 src/main.c func1() {
func2 72 src/main.c func2() {
func3 120 src/main.c func3() {
$ global -x '^[sg]et'
set_num 20 lib/util.c set_num(values) {
get_num 30 lib/util.c get_num() {
$ global -rx set_num
set_num 113 src/op.c set_num(32);
set_num 225 src/opop.c if (set_num(0) > 0) {
$ global strlen
$ (cd /usr/src/sys; gtags)
$ export GTAGSLIBPATH=/usr/src/sys
$ global -a strlen
/usr/src/sys/libkern/strlen.c
$ (cd /usr/src/lib; gtags)
$ GTAGSLIBPATH=/usr/src/lib:/usr/src/sys
$ global -a strlen
/usr/src/lib/libc/string/strlen.c
gtags - create tag files for global
SYNOPSIS
gtags [-ciIOqvw][-C dir][-d tag-file][-f file][dbpath]
Examples
$ ls -F
Makefile src/ lib/
$ gtags -v
$ global -x main
main 10 src/main.c main (argc, argv) {
htags - generate a hypertext from a set of source files
htags-server - a private web/cgi server fot htgas
gozilla - force firefox to display specified part of a source file
gtags-cscope - interactively examine a C program
SYNOPSIS
gtags-cscope [-bCdehLlVv][-F file ][-012345678 pattern][-p n]
Requesting the initial search
After the cross-reference is ready, gtags-cscope will display this menu:
Find this symbol:
Find this global definition:
Find functions called by this function (N/A):
Find references of this function:
Find this text string:
Change this text string:
Find this egrep pattern:
Find this file:
Find files #including this file:
Find assignments to this symbol:
Press the or keys repeatedly to move to the desired input field, type the text to search for, and then press the key.