在
vim中,您可以使用bufexists检查当前缓冲区中的文件是否已打开.对于短文件名(非完整路径),您可以使用bufexists检查它是否打开(bufname(‘filename’)).
有没有办法检查文件是否在选项卡中打开?
我最接近的解决方法是做类似的事情:
:tabdo if bufnr(bufname('filename')) in tabpagebuflist(): echo "Yes"
然而,那种pythonic伪代码…我不知道如何让它在vim中工作.我的目标是使用外部AppleScript检查文件是否已打开,如果是,则转到该文件中的一行.
理想情况下,我也希望能够搜索不同的GUI窗口,但我收集(例如Open vim tab in new (GUI) window?)在VIM中使用不同的GUI窗口非常具有挑战性/不可能.
解决方法
我的不耐烦和良好的文档使我变得更好……这是解决方案(在
Check if current tab is empty in vim和
Open vim tab in new (GUI) window?的帮助下).来源是
https://github.com/keflavich/macvim-skim
function! WhichTab(filename) " Try to determine whether file is open in any tab. " Return number of tab it's open in let buffername = bufname(a:filename) if buffername == "" return 0 endif let buffernumber = bufnr(buffername) " tabdo will loop through pages and leave you on the last one; " this is to make sure we don't leave the current page let currenttab = tabpagenr() let tab_arr = [] tabdo let tab_arr += tabpagebuflist() " return to current page exec "tabnext ".currenttab " Start checking tab numbers for matches let i = 0 for tnum in tab_arr let i += 1 echo "tnum: ".tnum." buff: ".buffernumber." i: ".i if tnum == buffernumber return i endif endfor endfunction function! WhichWindow(filename) " Try to determine whether the file is open in any GVIM *window* let serverlist = split(serverlist(),"\n") "let currentserver = ???? for server in serverlist let remotetabnum = remote_expr(server,\"WhichTab('".a:filename."')") if remotetabnum != 0 return server endif endfor endfunction
然后像这样使用:
exec "tabnext ".WhichTab('my_filename') echo remote_foreground( WhichWindow('my_filename') )
或者,从命令行,这是一个脚本,使用WhichTab转到文件的特定行:
#!/bin/bash file="$1" line="$2" for server in `mvim --serverlist` do foundfile=`mvim --servername $server --remote-expr "WhichTab('$file')"` if [[ $foundfile > 0 ]] then mvim --servername $server --remote-expr "foreground()" mvim --servername $server --remote-send ":exec \"tabnext $foundfile\" <CR>" mvim --servername $server --remote-send ":$line <CR>" fi done
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。