Giter Site home page Giter Site logo

Comments (7)

niexin-dev avatar niexin-dev commented on July 18, 2024

主要是有时不记得函数全称,就想通过leaderf gtags去搜索一下,但第一次打开就很慢,这两个选项都开启了
771 let g:Lf_UseCache = 1
772 let g:Lf_UseMemoryCache=1

from leaderf.

Yggdroot avatar Yggdroot commented on July 18, 2024

主要是有时不记得函数全称,就想通过leaderf gtags去搜索一下,但第一次打开就很慢,这两个选项都开启了 771 let g:Lf_UseCache = 1 772 let g:Lf_UseMemoryCache=1

这两个选项都是Leaderf file相关的,跟gtags没关系。

from leaderf.

niexin-dev avatar niexin-dev commented on July 18, 2024

但我发现如果把leaderf的cache打开,leadetf gtags只会加载一次全部条目1643478,如果把cahe关了,每次都是从1一直读取到1643478,难道是我记错了,明天我再试试

from leaderf.

niexin-dev avatar niexin-dev commented on July 18, 2024

但我发现如果把leaderf的cache打开,leadetf gtags只会加载一次全部条目1643478,如果把cahe关了,每次都是从1一直读取到1643478,难道是我记错了,明天我再试试

这两个选项确实跟gtags没关系,我记混了,那么针对Leaderf[!] gtags --all第一次进入右下角需要加载,请问有什么办法让这个能打开vim的施主异步自动加载一次吗?第一次加载要等待,后续再调用Leaderf[!] gtags --all就是秒开了

from leaderf.

Yggdroot avatar Yggdroot commented on July 18, 2024

如果文件有变化,gtags数据库也会跟着变化,同样需要重新加载。所以感觉感觉在后台执行一次没有必要。

from leaderf.

niexin-dev avatar niexin-dev commented on July 18, 2024

如果文件有变化,gtags数据库也会跟着变化,同样需要重新加载。所以感觉感觉在后台执行一次没有必要。

不一定要改到eaderf中,没用过python,viml也不熟悉,所以主要是想了解怎样开机自动调用一次这个Leaderf gtags,想用autocmd VimEnter * call 来弄,但没想明白怎么调用这个Leaderf gtags

from leaderf.

Yggdroot avatar Yggdroot commented on July 18, 2024

直接调用Leaderf gtags好像不行,因为这样还是会打开leaderf的窗口。

def getContent(self, *args, **kwargs):
arguments_dict = kwargs.get("arguments", {})
self._is_debug = "--debug" in arguments_dict
if "--recall" in arguments_dict:
return []
if vim.current.buffer.name:
filename = os.path.normpath(lfDecode(vim.current.buffer.name))
else:
filename = os.path.join(lfGetCwd(), 'no_name')
if "--gtagsconf" in arguments_dict:
self._gtagsconf = arguments_dict["--gtagsconf"][0]
if "--gtagslabel" in arguments_dict:
self._gtagslabel = arguments_dict["--gtagslabel"][0]
if self._gtagsconf == '' and os.name == 'nt':
self._gtagsconf = os.path.normpath(os.path.join(self._which("gtags.exe"), "..", "share", "gtags", "gtags.conf")).join('""')
if "--gtagslibpath" in arguments_dict:
self._gtagslibpath = [os.path.abspath(os.path.expanduser(p)) for p in arguments_dict["--gtagslibpath"]]
for i in self._gtagslibpath:
if not os.path.exists(i):
print("`%s` does not exist!" % i)
else:
self._gtagslibpath = []
if "--update" in arguments_dict:
self._evalVimVar()
if "--accept-dotfiles" in arguments_dict:
self._accept_dotfiles = "--accept-dotfiles "
if "--skip-unreadable" in arguments_dict:
self._skip_unreadable = "--skip-unreadable "
if "--skip-symlink" in arguments_dict and self._skip_symlink != "":
skip_symlink = arguments_dict["--skip-symlink"]
self._skip_symlink = "--skip-symlink%s " % ('=' + skip_symlink[0] if skip_symlink else "")
self.updateGtags(filename, single_update=False, auto=False)
return
elif "--remove" in arguments_dict:
self._remove(filename)
return
if "--path-style" in arguments_dict:
path_style = "--path-style %s " % arguments_dict["--path-style"][0]
else:
path_style = ""
auto_jump = False
self._last_result_format = self._result_format
self._result_format = 'ctags-mod'
if "--result" in arguments_dict:
self._result_format = arguments_dict["--result"][0]
if "-d" in arguments_dict:
pattern = arguments_dict["-d"][0]
pattern_option = "-d -e %s " % pattern
if "--auto-jump" in arguments_dict:
auto_jump = True
elif "-r" in arguments_dict:
pattern = arguments_dict["-r"][0]
pattern_option = "-r -e %s " % pattern
if "--auto-jump" in arguments_dict:
auto_jump = True
elif "-s" in arguments_dict:
pattern = arguments_dict["-s"][0]
pattern_option = "-s -e %s " % pattern
elif "-g" in arguments_dict:
pattern = arguments_dict["-g"][0]
pattern_option = "-g -e %s " % pattern
elif "--by-context" in arguments_dict:
pattern = lfEval('expand("<cword>")')
pattern_option = '--from-here "%d:%s" %s ' % (vim.current.window.cursor[0], vim.current.buffer.name, pattern)
if "--auto-jump" in arguments_dict:
auto_jump = True
else:
if "--current-buffer" in arguments_dict:
pattern_option = '-f "%s" -q' % vim.current.buffer.name
elif "--all-buffers" in arguments_dict:
pattern_option = '-f "%s" -q' % '" "'.join(b.name for b in vim.buffers)
else: # '--all' or empty means the whole project
pattern_option = None
root, dbpath, exists = self._root_dbpath(filename)
if not filename.startswith(root):
libdb = os.path.join(dbpath, "GTAGSLIBPATH")
if os.path.exists(libdb):
with lfOpen(libdb, 'r', errors='ignore') as f:
for line in f:
tmp_root, tmp_dbpath = line.rstrip().split('\t', 1)
if filename.startswith(tmp_root):
root = tmp_root
dbpath = tmp_dbpath
break
if "--result" in arguments_dict:
self._result_format = arguments_dict["--result"][0]
else:
self._result_format = "ctags"
env = os.environ
env["GTAGSROOT"] = root
env["GTAGSDBPATH"] = dbpath
if pattern_option is None: # '--all' or empty means the whole project
cmd = '{} -P | {} -L- -f {}--gtagslabel={} {}--color=never --result={}'.format(
self._global, self._global,
'--gtagsconf %s ' % self._gtagsconf if self._gtagsconf else "",
self._gtagslabel, path_style, self._result_format)
else:
cmd = '{} {}--gtagslabel={} {} {}--color=never --result={}'.format(
self._global, '--gtagsconf %s ' % self._gtagsconf if self._gtagsconf else "",
self._gtagslabel, pattern_option, path_style, self._result_format)
if not self._isDBModified(os.path.join(dbpath, 'GTAGS')) and self._content \
and self._cmd == cmd:
return self._content
self._cmd = cmd
executor = AsyncExecutor()
self._executor.append(executor)
lfCmd("let g:Lf_Debug_GtagsCmd = '%s'" % escQuote(cmd))
self._last_command = "--all"
content = executor.execute(cmd, env=env, raise_except=False)
return content
if "-S" in arguments_dict:
scope = "--scope %s " % os.path.abspath(arguments_dict["-S"][0])
else:
scope = ""
if "--literal" in arguments_dict:
literal = "--literal "
else:
literal = ""
if "-i" in arguments_dict:
ignorecase = "-i "
else:
ignorecase = ""
if "--append" not in arguments_dict or self._last_result_format is not None:
self._pattern_regex = []
# build vim regex, which is used for highlighting
if ignorecase:
case_pattern = r'\c'
else:
case_pattern = r'\C'
if len(pattern) > 1 and (pattern[0] == pattern[-1] == '"' or pattern[0] == pattern[-1] == "'"):
p = pattern[1:-1]
else:
p = pattern
if literal:
if len(pattern) > 1 and pattern[0] == pattern[-1] == '"':
p = re.sub(r'\\(?!")', r'\\\\', p)
else:
p = p.replace('\\', r'\\')
self._pattern_regex.append(r'\V' + case_pattern + p)
else:
if "-g" not in arguments_dict:
vim_regex = self.translateRegex(case_pattern + p.join([r'\b', r'\b']))
vim_regex = vim_regex.replace('.', r'\w')
else:
vim_regex = self.translateRegex(case_pattern + p)
self._pattern_regex.append(vim_regex)
root, dbpath, exists = self._root_dbpath(filename)
env = os.environ
env["GTAGSROOT"] = root
env["GTAGSDBPATH"] = dbpath
cmd = '{} {}--gtagslabel={} {} {}{}{}{}--color=never --result={}'.format(
self._global, '--gtagsconf %s ' % self._gtagsconf if self._gtagsconf else "",
self._gtagslabel, pattern_option, path_style, scope, literal,
ignorecase, self._result_format)
executor = AsyncExecutor()
self._executor.append(executor)
lfCmd("let g:Lf_Debug_GtagsCmd = '%s'" % escQuote(cmd))
self._last_command = "others"
content = executor.execute(cmd, env=env)
libdb = os.path.join(dbpath, "GTAGSLIBPATH")
if os.path.exists(libdb):
with lfOpen(libdb, 'r', errors='ignore') as f:
for line in f:
root, dbpath = line.rstrip().split('\t', 1)
env = os.environ
env["GTAGSROOT"] = root
env["GTAGSDBPATH"] = dbpath
if path_style == "--path-style abslib ":
path_style = "--path-style absolute "
cmd = '{} {}--gtagslabel={} {} {}{}{}{}--color=never --result={} -q'.format(
self._global, '--gtagsconf %s ' % self._gtagsconf if self._gtagsconf else "",
self._gtagslabel, pattern_option, path_style, scope, literal,
ignorecase, self._result_format)
executor = AsyncExecutor()
self._executor.append(executor)
content += executor.execute(cmd, env=env)
if auto_jump:
first_two = list(itertools.islice(content, 2))
if len(first_two) == 1:
return first_two
else:
return content.join_left(first_two)
return content

if pattern_option is None: # '--all' or empty means the whole project
cmd = '{} -P | {} -L- -f {}--gtagslabel={} {}--color=never --result={}'.format(
self._global, self._global,
'--gtagsconf %s ' % self._gtagsconf if self._gtagsconf else "",
self._gtagslabel, path_style, self._result_format)
else:
cmd = '{} {}--gtagslabel={} {} {}--color=never --result={}'.format(
self._global, '--gtagsconf %s ' % self._gtagsconf if self._gtagsconf else "",
self._gtagslabel, pattern_option, path_style, self._result_format)
if not self._isDBModified(os.path.join(dbpath, 'GTAGS')) and self._content \
and self._cmd == cmd:
return self._content
self._cmd = cmd
executor = AsyncExecutor()
self._executor.append(executor)
lfCmd("let g:Lf_Debug_GtagsCmd = '%s'" % escQuote(cmd))
self._last_command = "--all"
content = executor.execute(cmd, env=env, raise_except=False)
return content

主要逻辑在这里,代码耦合性有点大,不改Leaderf的代码应该做不到。

from leaderf.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.