Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

leaderf在右侧显示tag如果添加!(Normal)按下ESC无法关闭. #302

Closed
roachsinai opened this issue Mar 8, 2019 · 56 comments
Closed
Labels

Comments

@roachsinai
Copy link
Contributor

let g:Lf_NormalMap = {
	\ "File":   [["<ESC>", ':exec g:Lf_py "fileExplManager.quit()"<CR>']],
	\ "Buffer": [["<ESC>", ':exec g:Lf_py "bufExplManager.quit()"<CR>']],
	\ "Mru":    [["<ESC>", ':exec g:Lf_py "mruExplManager.quit()"<CR>']],
	\ "Tag":    [["<ESC>", ':exec g:Lf_py "tagExplManager.quit()"<CR>']],
	\ "Function":    [["<ESC>", ':exec g:Lf_py "functionExplManager.quit()"<CR>']],
	\ "Colorscheme":    [["<ESC>", ':exec g:Lf_py "colorschemeExplManager.quit()"<CR>']],
	\ }

noremap <Leader>f :Leaderf! function --right<cr>
noremap <Leader>t :Leaderf! bufTag --right<cr>

上面的设置下按下<leader>f,然后按下ESC可以关闭右侧的split。

上面的设置下按下<leader>t,然后按下ESC无法关闭右侧的split。

如果修改设置去掉tag的感叹号,即改为:

noremap <Leader>t :Leaderf bufTag --right<cr>,然后按下<leader>t,然后按下ESC可以关闭右侧的split。


另外,如何在所有buffer中在右侧显示tag?

  1. Leaderf 后面没有 bufTagAll 子命令
  2. LeaderfBufTagAll 后面 --right也不对
@Yggdroot
Copy link
Owner

Yggdroot commented Mar 8, 2019

首先,把设置中的Tag改成BufTag,这是两个不同的命令。
有个--all:
Leaderf bufTag --right --all

可以查看帮助有哪些:
Leaderf bufTag -h

@roachsinai
Copy link
Contributor Author

感谢!

但是将设置改成noremap <Leader>ta :Leaderf! bufTag --right --all<cr>之后没有直接进入Normal模式。

@Yggdroot
Copy link
Owner

Yggdroot commented Mar 9, 2019

是有个bug,我在改。

@roachsinai
Copy link
Contributor Author

roachsinai commented Mar 9, 2019

添加--all之后发现第一次无法直接进入Normal模式,第二次和之后就直接进入Normal模式。


另一个是和needtree相关。就是使用vim打开一个文件之后,再打开needtree,然后通过nerdtree在已打开split再打开一个文件,那么:Leaderf! function --right --all<cr>行号超出范围错误。:Leaderf! bufTag --right --all<cr>一直无法进入Normal模式(tag没有行号超出范围错误)。

image

image
行号超出范围错误,右侧无内容。而如果不用nerdtree打开不会报这个错误。

@roachsinai
Copy link
Contributor Author

而如果不用nerdtree打开不会报这个错误。

比如用youcompleteme跳转到另一个文件中定义的函数,没有行号超出错误。

Yggdroot added a commit that referenced this issue Mar 10, 2019
@roachsinai
Copy link
Contributor Author

开nerdtree两个buffer:Leaderf! function --right --all<cr>错误:

处理 function leaderf#Any#start[4]..leaderf#LfPy 时发生错误:
第    1 行:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/anyExpl.py", line 675, in start
    the_args.start(arguments, *args, **kwargs)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/anyExpl.py", line 637, in _default_action
    manager.startExplorer(win_pos[2:], *args, **kwargs)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/manager.py", line 1325, in startExplorer
    self._bangEnter()
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 337, in _bangEnter
    self._callback(bang=True)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/manager.py", line 1372, in _workInIdle
    for i, line in enumerate(itertools.islice(content, 20)):
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 105, in _getFunctionList
    yield list(itertools.chain(func_list, itertools.chain.from_iterable(exe_taglist)))
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 103, in <genexpr>
    exe_taglist = (self._formatResult(*r) for r in exe_result)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 170, in _formatResult
    buffer[int(item[2][:-2]) - 1].strip(),
IndexError: 行号超出范围
处理 function leaderf#Any#start 时发生错误:
第    4 行:
E171: 缺少 :endif

不开nerdtree无错。

@Yggdroot
Copy link
Owner

奇怪,我怎么复现不了。

@roachsinai
Copy link
Contributor Author

vim打开文件,然后打开nerdtree,nerdtree再打开一个文件(选好文件之后Enter),再Leaderf! function --right --all应该可以复现。

@Yggdroot
Copy link
Owner

vim打开文件,然后打开nerdtree,nerdtree再打开一个文件(选好文件之后Enter),再Leaderf! function --right --all应该可以复现。

我就是这样操作的。
你会不会Python,如果会的话,可否帮忙debug一下。

@Yggdroot
Copy link
Owner

我前面的fix,你update了吗

@roachsinai
Copy link
Contributor Author

hmank ~/./p/LeaderF master > glggo
* 6ad3c1581c19289d53c4235f5f419e4c47cf7db4 (HEAD -> master) fix issue #304
* f4f7cfcf6c393497ec135167d63136c7a26dcd64 fix issue #302
* 1462b194d849f620f88b31b12d139cf187c4e4e0 --wd-mode use the value of `g:Lf_WorkingDirectoryMode` by default

Plug 更新的。

@roachsinai
Copy link
Contributor Author

vim打开文件,然后打开nerdtree,nerdtree再打开一个文件(选好文件之后Enter),再Leaderf! function --right --all应该可以复现。

我就是这样操作的。
你会不会Python,如果会的话,可否帮忙debug一下。

Python可以,vim script没学习过。

@Yggdroot
Copy link
Owner

你那边必现应该比较容易查,奇怪的是我这边就是不复现。

def _formatResult(self, buffer, result):
if not buffer.name:
return []
# a list of [tag, file, line, kind]
output = [line.split('\t') for line in result if line is not None]
if not output:
return []
if len(output[0]) < 4:
lfCmd("echoerr '%s'" % escQuote(str(output[0])))
return []
func_list = []
sorted = True
lastln = -1
for _, item in enumerate(output):
bufname = buffer.name if vim.options["autochdir"] else lfRelpath(buffer.name)
try:
ln = int(item[2][:-2], 0)
except:
ln = -1
if lastln > ln:
sorted = False
else:
lastln = ln
line = "{}\t{}\t[{}:{} {}]".format(item[3],
buffer[int(item[2][:-2]) - 1].strip(),
bufname, # file
item[2][:-2], # line
buffer.number
)
func_list.append((ln, line))
if not sorted:
func_list.sort()
func_list = [ line for ln, line in func_list ]
self._func_list[buffer.number] = func_list
return func_list

可以在这个函数里加些打印,看看情况。打印可以通过vim的命令:mess来查看。
比如可以打印一下item是什么?为什么buffer[int(item[2][:-2]) - 1].strip()会报错。

@roachsinai
Copy link
Contributor Author

roachsinai commented Mar 11, 2019

我在/home/roach/code/Git/FlapPyBird/目录下打开flappy.py文件。

###### item: ['main', '/home/roach/code/Git/FlapPyBird/flappy.py', '60;"', 'f'] ######

image

@Yggdroot
Copy link
Owner

只打开一个文件,不报错:

看报错情况下的打印。

@roachsinai
Copy link
Contributor Author

只打开一个文件,不报错:

简体中文消息维护者: Yuheng Xie <[email protected]>
"flappy.py" 493L, 16858C
######      item: ['main', '/home/roach/code/Git/FlapPyBird/flappy.py', '60;"', 'f']     ######
######      item[2][:-2]: 60     ######
######      len(buffer): 493     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def main():     ######
######      item: ['showWelcomeAnimation', '/home/roach/code/Git/FlapPyBird/flappy.py', '139;"', 'f']     ######
######      item[2][:-2]: 139     ######
######      len(buffer): 493     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def showWelcomeAnimation():     ######
######      item: ['mainGame', '/home/roach/code/Git/FlapPyBird/flappy.py', '194;"', 'f']     ######
######      item[2][:-2]: 194     ######
######      len(buffer): 493     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def mainGame(movementInfo):     ######
######      item: ['showGameOverScreen', '/home/roach/code/Git/FlapPyBird/flappy.py', '331;"', 'f']     ######
######      item[2][:-2]: 331     ######
######      len(buffer): 493     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def showGameOverScreen(crashInfo):     ######
######      item: ['playerShm', '/home/roach/code/Git/FlapPyBird/flappy.py', '390;"', 'f']     ######
######      item[2][:-2]: 390     ######
######      len(buffer): 493     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def playerShm(playerShm):     ######
######      item: ['getRandomPipe', '/home/roach/code/Git/FlapPyBird/flappy.py', '401;"', 'f']     ######
######      item[2][:-2]: 401     ######
######      len(buffer): 493     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def getRandomPipe():     ######
######      item: ['showScore', '/home/roach/code/Git/FlapPyBird/flappy.py', '417;"', 'f']     ######
######      item[2][:-2]: 417     ######
######      len(buffer): 493     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def showScore(score):     ######
######      item: ['checkCrash', '/home/roach/code/Git/FlapPyBird/flappy.py', '432;"', 'f']     ######
######      item[2][:-2]: 432     ######
######      len(buffer): 493     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def checkCrash(player, upperPipes, lowerPipes):     ######
######      item: ['pixelCollision', '/home/roach/code/Git/FlapPyBird/flappy.py', '467;"', 'f']     ######
######      item[2][:-2]: 467     ######
######      len(buffer): 493     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def pixelCollision(rect1, rect2, hitmask1, hitmask2):     ######
######      item: ['getHitmask', '/home/roach/code/Git/FlapPyBird/flappy.py', '483;"', 'f']     ######
######      item[2][:-2]: 483     ######
######      len(buffer): 493     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def getHitmask(image):     ######

搭的梯子好像断了。。传不了图片了。

@roachsinai
Copy link
Contributor Author

两个buffer,报错:

######      item: ['main', '/home/roach/code/Git/FlapPyBird/flappy.py', '60;"', 'f']     ######
######      item[2][:-2]: 60     ######
######      len(buffer): 1     ######
处理 function leaderf#Any#start[4]..leaderf#LfPy 时发生错误:
第    1 行:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/anyExpl.py", line 675, in start
    the_args.start(arguments, *args, **kwargs)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/anyExpl.py", line 637, in _default_action
    manager.startExplorer(win_pos[2:], *args, **kwargs)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/manager.py", line 1328, in startExplorer
    self._bangEnter()
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 341, in _bangEnter
    self._callback(bang=True)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/manager.py", line 1375, in _workInIdle
    for i, line in enumerate(itertools.islice(content, 20)):
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 105, in _getFunctionList
    yield list(itertools.chain(func_list, itertools.chain.from_iterable(exe_taglist)))
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 103, in <genexpr>
    exe_taglist = (self._formatResult(*r) for r in exe_result)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 172, in _formatResult
    print(f"######      buffer[int(item[2][:-2]) - 1].strip(): {buffer[int(item[2][:-2]) - 1].strip()}     ######")
IndexError: 行号超出范围
处理 function leaderf#Any#start 时发生错误:
第    4 行:
E171: 缺少 :endif
请按 ENTER 或其它命令继续

@Yggdroot
Copy link
Owner

Yggdroot commented Mar 11, 2019

buffer.name是什么,为什么len(buffer)是1呢?buffer应该是/home/roach/code/Git/FlapPyBird/flappy.py才对呀

@roachsinai
Copy link
Contributor Author

LeaderF/autoload/leaderf/python/leaderf/functionExpl.py中我添加的:

            print(f"######      item: {item}     ######")
            print(f"######      item[2][:-2]: {item[2][:-2]}     ######")
            print(f"######      len(buffer): {len(buffer)}     ######")
            print(f"######      buffer.name: {buffer.name}     ######")
            print(f"######      buffer: {buffer}     ######")
            print(f"######      buffer[int(item[2][:-2]) - 1].strip(): {buffer[int(item[2][:-2]) - 1].strip()}     ######")

输出:

######      item: ['main', '/home/roach/code/Git/FlapPyBird/flappy.py', '60;"', 'f']     ######
######      item[2][:-2]: 60     ######
######      len(buffer): 1     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/flappy.py     ######
######      buffer: <buffer flappy.py>     ######

@Yggdroot
Copy link
Owner

奇怪,flappy.py里只有一行吗? vim的bug?你用的vim还是neovim?

@roachsinai
Copy link
Contributor Author

不是,有几百行,两个buffer一个是flappy.py,一个是setup.py,不过只有一个split,另一个buffer是隐藏的。上面的报错是当前显示buffer为setup.py。如果当前显示flappy.py报错为:

"flappy.py" 493L, 16858C4C     t
######      item: ['main', '/home/roach/code/Git/FlapPyBird/flappy.py', '60;"', 'f']     ######
######      item[2][:-2]: 60     ######
######      len(buffer): 493     ######
######      len(buffer.name): 41     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/flappy.py     ######
######      buffer: <buffer flappy.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def main():     ######
######      item: ['showWelcomeAnimation', '/home/roach/code/Git/FlapPyBird/flappy.py', '139;"', 'f']     ######
######      item[2][:-2]: 139     ######
######      len(buffer): 493     ######
######      len(buffer.name): 41     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/flappy.py     ######
######      buffer: <buffer flappy.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def showWelcomeAnimation():     ######
######      item: ['mainGame', '/home/roach/code/Git/FlapPyBird/flappy.py', '194;"', 'f']     ######
######      item[2][:-2]: 194     ######
######      len(buffer): 493     ######
######      len(buffer.name): 41     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/flappy.py     ######
######      buffer: <buffer flappy.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def mainGame(movementInfo):     ######
######      item: ['showGameOverScreen', '/home/roach/code/Git/FlapPyBird/flappy.py', '331;"', 'f']     ######
######      item[2][:-2]: 331     ######
######      len(buffer): 493     ######
######      len(buffer.name): 41     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/flappy.py     ######
######      buffer: <buffer flappy.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def showGameOverScreen(crashInfo):     ######
######      item: ['playerShm', '/home/roach/code/Git/FlapPyBird/flappy.py', '390;"', 'f']     ######
######      item[2][:-2]: 390     ######
######      len(buffer): 493     ######
######      len(buffer.name): 41     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/flappy.py     ######
######      buffer: <buffer flappy.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def playerShm(playerShm):     ######
######      item: ['getRandomPipe', '/home/roach/code/Git/FlapPyBird/flappy.py', '401;"', 'f']     ######
######      item[2][:-2]: 401     ######
######      len(buffer): 493     ######
######      len(buffer.name): 41     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/flappy.py     ######
######      buffer: <buffer flappy.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def getRandomPipe():     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def getRandomPipe():     ######
######      item: ['showScore', '/home/roach/code/Git/FlapPyBird/flappy.py', '417;"', 'f']     ######
######      item[2][:-2]: 417     ######
######      item[2][:-2]: 417     ######
######      len(buffer): 493     ######
######      len(buffer.name): 41     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/flappy.py     ######
######      buffer: <buffer flappy.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def showScore(score):     ######
######      item: ['checkCrash', '/home/roach/code/Git/FlapPyBird/flappy.py', '432;"', 'f']     ######
######      item: ['checkCrash', '/home/roach/code/Git/FlapPyBird/flappy.py', '432;"', 'f']     ######
######      item[2][:-2]: 432     ######
######      len(buffer): 493     ######
######      len(buffer.name): 41     ######
######      len(buffer.name): 41     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/flappy.py     ######
######      buffer: <buffer flappy.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def checkCrash(player, upperPipes, lowerPipes):     ######
######      item: ['pixelCollision', '/home/roach/code/Git/FlapPyBird/flappy.py', '467;"', 'f']     ######
######      item: ['pixelCollision', '/home/roach/code/Git/FlapPyBird/flappy.py', '467;"', 'f']     ######
######      item[2][:-2]: 467     ######
######      len(buffer): 493     ######
######      len(buffer.name): 41     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/flappy.py     ######
######      buffer: <buffer flappy.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def pixelCollision(rect1, rect2, hitmask1, hitmask2):     ######
######      item: ['getHitmask', '/home/roach/code/Git/FlapPyBird/flappy.py', '483;"', 'f']     ######
######      item: ['getHitmask', '/home/roach/code/Git/FlapPyBird/flappy.py', '483;"', 'f']     ######
######      item[2][:-2]: 483     ######
######      item[2][:-2]: 483     ######
######      len(buffer): 493     ######
######      len(buffer.name): 41     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/flappy.py     ######
######      buffer: <buffer flappy.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def getHitmask(image):     ######
######      item: ['isSystemDLL', '/home/roach/code/Git/FlapPyBird/setup.py', '8;"', 'f']     ######
######      item[2][:-2]: 8     ######
######      len(buffer): 1     ######
######      len(buffer): 1     ######
######      len(buffer.name): 40     ######
######      len(buffer.name): 40     ######
######      len(buffer.name): 40     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/setup.py     ######
######      buffer: <buffer setup.py>     ######
处理 function leaderf#Any#start[4]..leaderf#LfPy 时发生错误:
第    1 行:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/anyExpl.py", line 675, in start
处理 function leaderf#Any#start[4]..leaderf#LfPy[1]..<SNR>121_PollFileParseResponse[1]..<SNR>121_Pyeval 时发生错误:
第    2 行:
    the_args.start(arguments, *args, **kwargs)
    the_args.start(arguments, *args, **kwargs)
处理 function leaderf#Any#start[4]..leaderf#LfPy 时发生错误:
第    1 行:
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/anyExpl.py", line 637, in _default_action
    manager.startExplorer(win_pos[2:], *args, **kwargs)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/manager.py", line 1328, in startExplorer
    self._bangEnter()
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 344, in _bangEnter
处理 function leaderf#Any#start[4]..leaderf#LfPy[1]..<SNR>121_PollFileParseResponse[1]..<SNR>121_Pyeval 时发生错误:
第    2 行:
    self._callback(bang=True)
    self._callback(bang=True)
处理 function leaderf#Any#start[4]..leaderf#LfPy 时发生错误:
第    1 行:
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/manager.py", line 1375, in _workInIdle
    for i, line in enumerate(itertools.islice(content, 20)):
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 105, in _getFunctionList
处理 function leaderf#Any#start[4]..leaderf#LfPy[1]..<SNR>121_PollFileParseResponse[1]..<SNR>121_Pyeval 时发生错误:
第    2 行:
    yield list(itertools.chain(func_list, itertools.chain.from_iterable(exe_taglist)))
    yield list(itertools.chain(func_list, itertools.chain.from_iterable(exe_taglist)))
处理 function leaderf#Any#start[4]..leaderf#LfPy 时发生错误:
第    1 行:
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 103, in <genexpr>
    exe_taglist = (self._formatResult(*r) for r in exe_result)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 175, in _formatResult
    print(f"######      buffer[int(item[2][:-2]) - 1].strip(): {buffer[int(item[2][:-2]) - 1].strip()}     ######")
处理 function leaderf#Any#start[4]..leaderf#LfPy[1]..<SNR>121_PollFileParseResponse[1]..<SNR>121_Pyeval 时发生错误:
第    2 行:
IndexError: 行号超出范围
IndexError: 行号超出范围
请按 ENTER 或其它命令继续

@roachsinai
Copy link
Contributor Author

hmank ~/c/G/FlapPyBird master > cat test1.py     
def func1_1():
    print("test1.py func1")
hmank ~/c/G/FlapPyBird master > cat test2.py
def func2_1():
    print("test2.py func1")


def func2_2():
    print("test2.py func2")
hmank ~/c/G/FlapPyBird master > 

vim打开test1.py,然后打开nerdtree,然后打开test2.py当前有两个split左边是nerdtree,右边是test2.py,然后执行:Leaderf! function --right --all<cr>

不报错,但是不显示test1.py中的函数:

f		[test1.py:1 1]
f	def func2_1():	[test2.py:1 3]
f	def func2_2():	[test2.py:5 3]

然后切换一下右侧split中的内容为test1.py的buffer,报错:


处理 function leaderf#Any#start[4]..leaderf#LfPy 时发生错误:
第    1 行:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/anyExpl.py", line 675, in start
    the_args.start(arguments, *args, **kwargs)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/anyExpl.py", line 637, in _default_action
    manager.startExplorer(win_pos[2:], *args, **kwargs)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/manager.py", line 1328, in startExplorer
    self._bangEnter()
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 337, in _bangEnter
    self._callback(bang=True)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/manager.py", line 1375, in _workInIdle
    for i, line in enumerate(itertools.islice(content, 20)):
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 105, in _getFunctionList
    yield list(itertools.chain(func_list, itertools.chain.from_iterable(exe_taglist)))
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 103, in <genexpr>
    exe_taglist = (self._formatResult(*r) for r in exe_result)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 170, in _formatResult
    buffer[int(item[2][:-2]) - 1].strip(),
IndexError: 行号超出范围
处理 function leaderf#Any#start 时发生错误:
第    4 行:
E171: 缺少 :endif
请按 ENTER 或其它命令继续

这个你试试能不能复现?

@Yggdroot
Copy link
Owner

Yggdroot commented Mar 11, 2019

很遗憾,还是不能复现。

你能帮忙分析一下吗?我感觉你的vim有bug。len(buffer): 1 意思是这个buffer中的行数是1,显然都不是1,这里也不应该是1, 这里很奇怪。

你用的是vim还是neovim,是哪个版本,在什么系统上跑的, 对应的Python版本是什么?
你可否换个平台再试一下。

@roachsinai
Copy link
Contributor Author

            print(f"######      item: {item}     ######")
            print(f"######      item[2][:-2]: {item[2][:-2]}     ######")
            print(f"######      len(buffer): {len(buffer)}     ######")
            print(f"######      len(buffer.name): {len(buffer.name)}     ######")
            print(f"######      buffer.name: {buffer.name}     ######")
            print(f"######      buffer: {buffer}     ######")
            print(f"######      buffer[int(item[2][:-2]) - 1].strip(): {buffer[int(item[2][:-2]) - 1].strip()}     ######")

你能否发一下你的:mess,我对比一下。

我现在的是右侧split显示test1.py,报错:


######      item: ['func1_1', '/home/roach/code/Git/FlapPyBird/test1.py', '1;"', 'f']     ######
######      item[2][:-2]: 1     ######
######      len(buffer): 2     ######
######      len(buffer.name): 40     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/test1.py     ######
######      buffer: <buffer test1.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def func1_1():     ######
######      item: ['func2_1', '/home/roach/code/Git/FlapPyBird/test2.py', '1;"', 'f']     ######
######      item[2][:-2]: 1     ######
######      len(buffer): 1     ######
######      len(buffer.name): 40     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/test2.py     ######
######      buffer: <buffer test2.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip():      ######
######      item: ['func2_2', '/home/roach/code/Git/FlapPyBird/test2.py', '5;"', 'f']     ######
######      item[2][:-2]: 5     ######
######      len(buffer): 1     ######
######      len(buffer.name): 40     ######
######      buffer.name: /home/roach/code/Git/FlapPyBird/test2.py     ######
######      buffer: <buffer test2.py>     ######
处理 function leaderf#Any#start[4]..leaderf#LfPy 时发生错误:
第    1 行:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/anyExpl.py", line 675, in start
    the_args.start(arguments, *args, **kwargs)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/anyExpl.py", line 637, in _default_action
    manager.startExplorer(win_pos[2:], *args, **kwargs)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/manager.py", line 1328, in startExplorer
    self._bangEnter()
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 344, in _bangEnter
    self._callback(bang=True)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/manager.py", line 1375, in _workInIdle
    for i, line in enumerate(itertools.islice(content, 20)):
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 105, in _getFunctionList
    yield list(itertools.chain(func_list, itertools.chain.from_iterable(exe_taglist)))
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 103, in <genexpr>
    exe_taglist = (self._formatResult(*r) for r in exe_result)
  File "/home/roach/.vim/plugged/LeaderF/autoload/leaderf/python/leaderf/functionExpl.py", line 175, in _formatResult
    print(f"######      buffer[int(item[2][:-2]) - 1].strip(): {buffer[int(item[2][:-2]) - 1].strip()}     ######")
IndexError: 行号超出范围

vim:

hmank ~ > vim --version                      
VIM - Vi IMproved 8.1 (2018 May 18, compiled Feb  7 2019 19:47:28)
包含补丁: 1-877
编译者 Arch Linux
巨型版本 with GTK3 GUI.  可使用(+)与不可使用(-)的功能:
  • OS: Manjrao Linux
  • Python: 3.7.2

@roachsinai
Copy link
Contributor Author

roachsinai commented Mar 11, 2019

有一个额外的问题想问一下:

let g:Lf_CommandMap = {'<C-K>': ['<Up>'], '<C-J>': ['<Down>']}

我的<F5>已经映射到debug python脚本了,所以想更改Leaderf的刷新为<leader><F5>,添加了设置:let g:Lf_CommandMap = {'<leader><F5>': ['<F5>']}但是不对。

@Yggdroot
Copy link
Owner

有一个额外的问题想问一下:

let g:Lf_CommandMap = {'<C-K>': ['<Up>'], '<C-J>': ['<Down>']}

我的<F5>已经映射到debug python脚本了,所以想更改Leaderf的刷新为<leader><F5>,添加了设置:let g:Lf_CommandMap = {'<leader><F5>': ['<F5>']}但是不对。

不支持这样,只支持一个键。

@Yggdroot
Copy link
Owner

先打开test1,在打开test2,当前窗口是左边nerdtree,右边test2.py:

Messages maintainer: Bram Moolenaar <[email protected]>
"test1.py" 2L, 43C
"test2.py" 6L, 88C
######      item: ['func1_1', '/Users/yggdroot/home/workspace/bug/test1.py', '1;"', 'f']     ######
######      item[2][:-2]: 1     ######
######      len(buffer): 2     ######
######      len(buffer.name): 43     ######
######      buffer.name: /Users/yggdroot/home/workspace/bug/test1.py     ######
######      buffer: <buffer test1.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def func1_1():     ######
######      item: ['func2_1', '/Users/yggdroot/home/workspace/bug/test2.py', '1;"', 'f']     ######
######      item[2][:-2]: 1     ######
######      len(buffer): 6     ######
######      len(buffer.name): 43     ######
######      buffer.name: /Users/yggdroot/home/workspace/bug/test2.py     ######
######      buffer: <buffer test2.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def func2_1():     ######
######      item: ['func2_2', '/Users/yggdroot/home/workspace/bug/test2.py', '5;"', 'f']     ######
######      item[2][:-2]: 5     ######
######      len(buffer): 6     ######
######      len(buffer.name): 43     ######
######      buffer.name: /Users/yggdroot/home/workspace/bug/test2.py     ######
######      buffer: <buffer test2.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def func2_2():     ######

右边是test1.py:

######      item: ['func2_1', '/Users/yggdroot/home/workspace/bug/test2.py', '1;"', 'f']     ######
######      item[2][:-2]: 1     ######
######      len(buffer): 6     ######
######      len(buffer.name): 43     ######
######      buffer.name: /Users/yggdroot/home/workspace/bug/test2.py     ######
######      buffer: <buffer test2.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def func2_1():     ######
######      item: ['func2_2', '/Users/yggdroot/home/workspace/bug/test2.py', '5;"', 'f']     ######
######      item[2][:-2]: 5     ######
######      len(buffer): 6     ######
######      len(buffer.name): 43     ######
######      buffer.name: /Users/yggdroot/home/workspace/bug/test2.py     ######
######      buffer: <buffer test2.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def func2_2():     ######
######      item: ['func1_1', '/Users/yggdroot/home/workspace/bug/test1.py', '1;"', 'f']     ######
######      item[2][:-2]: 1     ######
######      len(buffer): 2     ######
######      len(buffer.name): 43     ######
######      buffer.name: /Users/yggdroot/home/workspace/bug/test1.py     ######
######      buffer: <buffer test1.py>     ######
######      buffer[int(item[2][:-2]) - 1].strip(): def func1_1():     ######
 Done!

@Yggdroot
Copy link
Owner

我认为基本可以确定是vim的bug了。

@roachsinai
Copy link
Contributor Author

emmm,我刚才在WSL上试了一下,错误一样。不过WSL是ArchLinux。或者是我配置的问题?我一会儿试试仅保留Leaderfnerdtree试一下。

@roachsinai
Copy link
Contributor Author

" backspace work
set backspace=indent,eol,start
" 定义快捷键的前缀,即<Leader>
let mapleader=";"

" https://stackoverflow.com/a/3033455/6074780
" set textwidth=80
" set formatoptions+=w

"This unsets the "last search pattern" register by hitting return
nnoremap <Leader><space> :let@/=""<CR>

" 让配置变更立即生效
" autocmd BufWritePost $MYVIMRC nested :source $MYVIMRC

" let Vim jump to the last position when reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

" 开启文件类型侦测
filetype on
" 根据侦测到的不同类型加载对应的插件
filetype plugin on

" 设置快捷键将选中文本复制到系统剪切板
noremap <Leader>y "+y
" 设置快捷键将选中文本剪切到系统剪切板
noremap <Leader>d "+d
" 设置快捷键将系统剪切板的内容粘贴至vim
nmap <Leader>p "+p
" 定义快捷键关闭当前分割窗口
nmap <Leader>q :q<CR>
" 定义快捷键保存当前窗口的内容
nmap <Leader>w :w<CR>
" 定义快捷键以sudo保存当前窗口内容
nmap <Leader>W :w !sudo tee "%" > /dev/null
" 定义快捷键保存当前窗口的内容并退出 vim
nmap <Leader>wq :wq<CR>
" 定义快捷键保存所有窗口内容并退出 vim
nmap <Leader>wQ :wa<CR>:q<CR>
" 不做任何保存,直接退出 vim
nmap <Leader>Q :qa!<CR>
" 依次遍历子窗口
nnoremap nw <C-W><C-W>
" 跳转至右方的窗口
nnoremap <Leader>lw <C-W>l
" 跳转至左方的窗口
nnoremap <Leader>hw <C-W>h
" 跳转至上方的子窗口
nnoremap <Leader>kw <C-W>k
" 跳转至下方的子窗口
nnoremap <Leader>jw <C-W>j
" 在插入模式下,插入系统剪切板的内容
inoremap <C-F> <C-R>+

nmap <C-Up> [e
nmap <C-Down> ]e
" Bubble multiple lines, similar to Eclipse (requires unimpaired.vim)
vmap <C-Up> [egv
vmap <C-Down> ]egv
" 定义快捷键在结对符之间跳转
nmap <Leader>M %

" 开启实时搜索功能
set incsearch
" 搜索时大小写不敏感
set ignorecase
" 关闭兼容模式
set nocompatible
" vim 自身命令行模式智能补全
set wildmenu

" 缩进
xnoremap < <gv
xnoremap > >gv

" Vim Splits - Move Faster and More Naturally
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

" 不允许隐藏被修改过的 buffer
set nohidden
" normal 模式下使用 bl 列出 Buffer 列表
nnoremap <silent> bl :ls<CR>
" normal 模式下使用 bo 打开一个新 Buffer
nnoremap <silent> bo :enew<CR>
" normal 模式下使用 bn 切换到下一个 Buffer
nnoremap <silent> bn :bnext<CR>
" normal 模式下使用 bp 切换到上一个 Buffer
nnoremap <silent> bp :bprevious<CR>
" normal 模式下使用 bd 关闭当前 Buffer
nnoremap <silent> bd :bdelete<CR>
" delete buffer without losing the split window
nnoremap <silent> <Leader>bd :bp\|bd #<CR>
" delete all buffers except current
nnoremap <silent> <Leader>be %bd\|e#<CR>


" change to the directory of the currently open file
" nnoremap <silent> <Leader>cd cd %:p:h
" change the directory only for current window
" nnoremap <silent> <Leader>lcd lcd %:p:h

" Ctrl+T vim透明
let t:is_transparent = 0
function! Toggle_transparent()
    if t:is_transparent == 0
        hi Normal guibg=NONE ctermbg=NONE
        let t:is_transparent = 1
    else
        set background=dark
        let t:is_transparent = 0
    endif
endfunction
nnoremap <C-t> :call Toggle_transparent()<CR>

 if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

" 开启语法高亮功能
" syntax enable
" 允许用指定语法高亮配色方案替换默认方案
" syntax on

call plug#begin('~/.vim/plugged')
"Plug 'altercation/vim-colors-solarized'
"Plug 'tomasr/molokai'
"Plug 'vim-scripts/phd'
"Plug 'dracula/vim'
"Plug 'nanotech/jellybeans.vim'
"Plug 'w0ng/vim-hybrid'
"Plug 'rakr/vim-one'
"Plug 'mhartington/oceanic-next'
Plug 'morhetz/gruvbox'
Plug 'octol/vim-cpp-enhanced-highlight'
Plug 'nathanaelkane/vim-indent-guides'
Plug 'kshenoy/vim-signature'
"Plug 'vim-scripts/indexer.tar.gz'
Plug 'vim-scripts/DfrankUtil'
Plug 'vim-scripts/vimprj'
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
"Plug 'Valloric/YouCompleteMe'
Plug 'ntpeters/vim-better-whitespace'
Plug 'tpope/vim-surround'
Plug 'yianwillis/vimcdoc'
Plug 'jiangmiao/auto-pairs'
"Plug 'tpope/vim-unimpaired'
Plug 'Lokaltog/vim-easymotion'
" Plug 'terryma/vim-multiple-cursors'
Plug 'sjl/gundo.vim'
Plug 'scrooloose/nerdcommenter'
"Plug 't9md/vim-choosewin'
"Plug 'justinmk/vim-dirvish'
Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }
Plug 'w0rp/ale'
Plug 'itchyny/lightline.vim'
Plug 'maximbaz/lightline-ale'
Plug 'myusuf3/numbers.vim'
"Plug 'blueyed/vim-diminactive'
"Plug 'Shougo/echodoc.vim'
"Plug 'kana/vim-fakeclip'
"Plug 'tpope/vim-abolish'
Plug 'iamcco/mathjax-support-for-mkdp', {'for': ['md', 'markdown']}
Plug 'iamcco/markdown-preview.nvim', {'do': 'cd app & yarn install', 'for': ['md', 'markdown']}
Plug 'mzlogin/vim-markdown-toc'
"Plug 'plytophogy/vim-virtualenv'
Plug 'tpope/vim-obsession'
Plug 'tweekmonster/impsort.vim'
Plug 'Shougo/vimproc.vim', {'do' : 'make'}
Plug 'idanarye/vim-vebugger'
"Plug 'vim-scripts/fcitx.vim'
Plug 'rlue/vim-barbaric'
Plug 'vim-scripts/a.vim'
"Plug 'tpope/vim-vinegar'
Plug 'scrooloose/nerdtree'
Plug 'tweekmonster/startuptime.vim'
"Plug 'tpope/vim-fugitive'
Plug 'itchyny/vim-gitbranch'
"Plug 'bsdelf/bufferhint'
" 插件列表结束
call plug#end()

nmap <Leader>ug :PlugUpgrade<CR>
nmap <Leader>ud :PlugUpdate<CR>

" True color support
"if (empty($TMUX))
"  if (has("termguicolors"))
"    set termguicolors
"  endif
"endif

set term=xterm-256color
" 配色方案
set background=dark
"colorscheme solarized
"colorscheme molokai
"colorscheme dracula
colorscheme gruvbox
"let g:gruvbox_contrast_light = 'soft'
"colorscheme jellybeans
"colorscheme hybrid
"colorscheme OceanicNext
"colorscheme one

"blueyed/vim-diminactive
"hi ColorColumn ctermbg=230 guibg=#ffffd7

" 禁止光标闪烁
set gcr=a:block-blinkon0
" 禁止显示滚动条
set guioptions-=l
set guioptions-=L
set guioptions-=r
set guioptions-=R
" 禁止显示菜单和工具条
set guioptions-=m
set guioptions-=iT

" Yggdroot/LeaderF
let g:Lf_ShowRelativePath = 0
let g:Lf_HideHelp = 1
" let g:Lf_UseCache = 0
" let g:Lf_PreviewResult = {'Function':0, 'Colorscheme':1}

let g:Lf_NormalMap = {
	\ "File":   [["<ESC>", ':exec g:Lf_py "fileExplManager.quit()"<CR>']],
	\ "Buffer": [["<ESC>", ':exec g:Lf_py "bufExplManager.quit()"<CR>']],
	\ "Mru":    [["<ESC>", ':exec g:Lf_py "mruExplManager.quit()"<CR>']],
	\ "Tag":    [["<ESC>", ':exec g:Lf_py "tagExplManager.quit()"<CR>']],
	\ "BufTag":    [["<ESC>", ':exec g:Lf_py "bufTagExplManager.quit()"<CR>']],
	\ "Function":    [["<ESC>", ':exec g:Lf_py "functionExplManager.quit()"<CR>']],
	\ "Colorscheme":    [["<ESC>", ':exec g:Lf_py "colorschemeExplManager.quit()"<CR>']],
	\ }
" 命令后加一个叹号会进入 normal 模式
noremap <Leader>f :Leaderf! function --right<cr>
noremap <Leader>fa :Leaderf! function --all --right<cr>
noremap <Leader>t :Leaderf! bufTag --right<cr>
noremap <Leader>ta :Leaderf! bufTag --right --all<cr>
noremap <Leader>fd :LeaderfFunctionCword!<cr>
noremap <Leader>m :LeaderfMru<cr>
noremap <Leader>mc :LeaderfMruCwd<cr>
noremap <Leader>l :LeaderfLine<cr>
noremap <Leader>la :LeaderfLineAll<cr>
noremap <Leader><Leader>d :LeaderfFile<cr>

" scrooloose/nerdtree
map <leader>n :NERDTreeToggle<CR>
let NERDTreeWinSize=24

就剩两个plugin了同样的错误,难道真是vim的bug??

你用的nvim?

@roachsinai
Copy link
Contributor Author

<F5>  : refresh the cache.

doc里面关于fresh只有这一条,有对应的命令么?

@roachsinai
Copy link
Contributor Author

应该就是vim了,配置不能再少了。。。

let mapleader=";"

if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

" 开启语法高亮功能
" syntax enable
" 允许用指定语法高亮配色方案替换默认方案
" syntax on

call plug#begin('~/.vim/plugged')
Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }
Plug 'scrooloose/nerdtree'
" 插件列表结束
call plug#end()

" Yggdroot/LeaderF
let g:Lf_ShowRelativePath = 0
let g:Lf_HideHelp = 1
" let g:Lf_UseCache = 0
" let g:Lf_PreviewResult = {'Function':0, 'Colorscheme':1}

let g:Lf_NormalMap = {
	\ "File":   [["<ESC>", ':exec g:Lf_py "fileExplManager.quit()"<CR>']],
	\ "Buffer": [["<ESC>", ':exec g:Lf_py "bufExplManager.quit()"<CR>']],
	\ "Mru":    [["<ESC>", ':exec g:Lf_py "mruExplManager.quit()"<CR>']],
	\ "Tag":    [["<ESC>", ':exec g:Lf_py "tagExplManager.quit()"<CR>']],
	\ "BufTag":    [["<ESC>", ':exec g:Lf_py "bufTagExplManager.quit()"<CR>']],
	\ "Function":    [["<ESC>", ':exec g:Lf_py "functionExplManager.quit()"<CR>']],
	\ "Colorscheme":    [["<ESC>", ':exec g:Lf_py "colorschemeExplManager.quit()"<CR>']],
	\ }
" 命令后加一个叹号会进入 normal 模式
noremap <Leader>f :Leaderf! function --right<cr>
noremap <Leader>fa :Leaderf! function --all --right<cr>
noremap <Leader>t :Leaderf! bufTag --right<cr>
noremap <Leader>ta :Leaderf! bufTag --right --all<cr>
noremap <Leader>fd :LeaderfFunctionCword!<cr>
noremap <Leader>m :LeaderfMru<cr>
noremap <Leader>mc :LeaderfMruCwd<cr>
noremap <Leader>l :LeaderfLine<cr>
noremap <Leader>la :LeaderfLineAll<cr>
noremap <Leader><Leader>d :LeaderfFile<cr>

" scrooloose/nerdtree
map <leader>n :NERDTreeToggle<CR>
let NERDTreeWinSize=24

@Yggdroot
Copy link
Owner

没有对应的命令。

@Yggdroot
Copy link
Owner

wsl上vim是什么版本?我vim,neovim都试了,在win,Linux,Mac上都试了,都复现不了。

@roachsinai
Copy link
Contributor Author

应该一样,或者更新我头两天更新了一次。

我vim,neovim都试了,在win,Linux,Mac上都试了,都复现不了。

这就不对了啊,我现在配置就那么点儿了。

@roachsinai
Copy link
Contributor Author

没有对应的命令。

那我把debug命令换成其他的,不占用了。

@Yggdroot
Copy link
Owner

有一个额外的问题想问一下:

let g:Lf_CommandMap = {'<C-K>': ['<Up>'], '<C-J>': ['<Down>']}

我的<F5>已经映射到debug python脚本了,所以想更改Leaderf的刷新为<leader><F5>,添加了设置:let g:Lf_CommandMap = {'<leader><F5>': ['<F5>']}但是不对。

你不需要更改,这里的<F5>是LeaderF打开时候用的,跟你的debug命令不冲突。

@Yggdroot
Copy link
Owner

你能多换几个平台,多换几个vim版本试一下吗?我这边是复现不了。

@roachsinai
Copy link
Contributor Author

我刚才在Manjaro 18.0.0 的安装U盘里面试了一下,也不行。

你测试的Linux是什么发行版?我在整个live usb试一试。

@Yggdroot
Copy link
Owner

我在Windows,Linux,mac上都试了,版本都不一样。

@roachsinai
Copy link
Contributor Author

我想的是,我先试一个你测试的可以的Linux发行版,我正在下的是Ubuntu 18.04不过网速喜人.你也可以下个Manjaro真个安装盘试一下。

@roachsinai
Copy link
Contributor Author

我这边用ubuntu的live cd试了一下,安装的vim, git, curl, ctags. 复现了啊。。

@roachsinai
Copy link
Contributor Author

centos7 + vim8 (vim-enhanced.x86_64 2:8.0.1428-1.0.78.el7.centos)可以复现,我测试的以下配置文件都复现了。

let mapleader=";"

if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

call plug#begin('~/.vim/plugged')
Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }
Plug 'scrooloose/nerdtree'
" 插件列表结束
call plug#end()

" Yggdroot/LeaderF
let g:Lf_ShowRelativePath = 0
let g:Lf_HideHelp = 1
" let g:Lf_UseCache = 0
" let g:Lf_PreviewResult = {'Function':0, 'Colorscheme':1}

let g:Lf_NormalMap = {
	\ "File":   [["<ESC>", ':exec g:Lf_py "fileExplManager.quit()"<CR>']],
	\ "Buffer": [["<ESC>", ':exec g:Lf_py "bufExplManager.quit()"<CR>']],
	\ "Mru":    [["<ESC>", ':exec g:Lf_py "mruExplManager.quit()"<CR>']],
	\ "Tag":    [["<ESC>", ':exec g:Lf_py "tagExplManager.quit()"<CR>']],
	\ "BufTag":    [["<ESC>", ':exec g:Lf_py "bufTagExplManager.quit()"<CR>']],
	\ "Function":    [["<ESC>", ':exec g:Lf_py "functionExplManager.quit()"<CR>']],
	\ "Colorscheme":    [["<ESC>", ':exec g:Lf_py "colorschemeExplManager.quit()"<CR>']],
	\ }
" 命令后加一个叹号会进入 normal 模式
noremap <Leader>f :Leaderf! function --right<cr>
noremap <Leader>fa :Leaderf! function --all --right<cr>
noremap <Leader>t :Leaderf! bufTag --right<cr>
noremap <Leader>ta :Leaderf! bufTag --right --all<cr>
noremap <Leader>fd :LeaderfFunctionCword!<cr>
noremap <Leader>m :LeaderfMru<cr>
noremap <Leader>mc :LeaderfMruCwd<cr>
noremap <Leader>l :LeaderfLine<cr>
noremap <Leader>la :LeaderfLineAll<cr>
noremap <Leader><Leader>d :LeaderfFile<cr>

" scrooloose/nerdtree
map <leader>n :NERDTreeToggle<CR>
let NERDTreeWinSize=24

@Yggdroot
Copy link
Owner

centos7 + vim8 (vim-enhanced.x86_64 2:8.0.1428-1.0.78.el7.centos)可以复现,我测试的以下配置文件都复现了。

let mapleader=";"

if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

call plug#begin('~/.vim/plugged')
Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }
Plug 'scrooloose/nerdtree'
" 插件列表结束
call plug#end()

" Yggdroot/LeaderF
let g:Lf_ShowRelativePath = 0
let g:Lf_HideHelp = 1
" let g:Lf_UseCache = 0
" let g:Lf_PreviewResult = {'Function':0, 'Colorscheme':1}

let g:Lf_NormalMap = {
	\ "File":   [["<ESC>", ':exec g:Lf_py "fileExplManager.quit()"<CR>']],
	\ "Buffer": [["<ESC>", ':exec g:Lf_py "bufExplManager.quit()"<CR>']],
	\ "Mru":    [["<ESC>", ':exec g:Lf_py "mruExplManager.quit()"<CR>']],
	\ "Tag":    [["<ESC>", ':exec g:Lf_py "tagExplManager.quit()"<CR>']],
	\ "BufTag":    [["<ESC>", ':exec g:Lf_py "bufTagExplManager.quit()"<CR>']],
	\ "Function":    [["<ESC>", ':exec g:Lf_py "functionExplManager.quit()"<CR>']],
	\ "Colorscheme":    [["<ESC>", ':exec g:Lf_py "colorschemeExplManager.quit()"<CR>']],
	\ }
" 命令后加一个叹号会进入 normal 模式
noremap <Leader>f :Leaderf! function --right<cr>
noremap <Leader>fa :Leaderf! function --all --right<cr>
noremap <Leader>t :Leaderf! bufTag --right<cr>
noremap <Leader>ta :Leaderf! bufTag --right --all<cr>
noremap <Leader>fd :LeaderfFunctionCword!<cr>
noremap <Leader>m :LeaderfMru<cr>
noremap <Leader>mc :LeaderfMruCwd<cr>
noremap <Leader>l :LeaderfLine<cr>
noremap <Leader>la :LeaderfLineAll<cr>
noremap <Leader><Leader>d :LeaderfFile<cr>

" scrooloose/nerdtree
map <leader>n :NERDTreeToggle<CR>
let NERDTreeWinSize=24

太棒了, 用你这个配置,我复现了。

@Yggdroot
Copy link
Owner

找到原因了,真是想不到。
因为你没有设置set hidden, 导致你打开第二个buffer时,第一个buffer就被unloaded,所以他的内容变为空(也就是len是1)。
我认为set hidden是必不可少的配置,就像set nocompatible(neovim默认就是设了的)一样。

@roachsinai
Copy link
Contributor Author

其实我设的set nohidden

@Yggdroot
Copy link
Owner

Yggdroot commented Mar 12, 2019

对呀,默认值就是nohidden,所以要设一下hidden

@Yggdroot
Copy link
Owner

其实我设的set nohidden

虽然说默认值就是nohidden,你还要特意设成nohidden,难道这么讨厌hidden这个属性吗

@roachsinai
Copy link
Contributor Author

好像之前是遇到的情况有点儿久,我正修改一个文件,看一个函数的定义(在另一个文件中)然后查看定义的时候直接把当前的split覆盖了。我希望新开一个split,就设置nohidden了。

Yggdroot added a commit that referenced this issue Mar 12, 2019
@Yggdroot
Copy link
Owner

好像之前是遇到的情况有点儿久,我正修改一个文件,看一个函数的定义(在另一个文件中)然后查看定义的时候直接把当前的split覆盖了。我希望新开一个split,就设置nohidden了。

感觉你设了nohidden并不能解决你原来的问题。

我已经改好了,即使设了nohidden也不会报错了,但是如果是2个buffer的话,因为第一个buffer是unloaded的,所以即使有--all,也只会有那个loaded的buffer的内容。

@Yggdroot Yggdroot added the bug label Mar 12, 2019
@roachsinai
Copy link
Contributor Author

@Yggdroot Y大有个问题请教一下,就是我有一个autocmd BufUnload命令,就是在关闭一个buffer的时候执行一些后续操作。

那么如果我set hidden了,在一个窗口里打开了两个文件,前一个就hidden了。那么如果我使用:q退出这个窗口,前一个就没有触发BufUnload命令。

是对于hidden的文件:q触发不了BufUnload命令么?BufUnload命令的文档和hidden文档没有说这个事情。

如果对于hidden文件无法触发,那么那种autocmd命令合适这个情况呢?尝试BufWinLeave也不行。

@Yggdroot
Copy link
Owner

:q 你是用来退出vim还是关掉当前的一个窗口?

就是在关闭一个buffer的时候执行一些后续操作

这里关闭指的是什么意思?

@roachsinai
Copy link
Contributor Author

关闭就是autocmd BufUnload后面接的命令,比如删除一个文件(比如buffer加载的是tt.c,我想unload这个buffer的时候执行一个函数,这个函数的功能是如果存在tt.py,就删除这个文件)。

因为只有一个窗口(没有tab),然后在这个窗口先打开一个文件,然后比如再Leaderf file选中<CR>一个文件(就是只有一个窗口,然后打开了两个buffer,最开始的就hidden了)。:q退出窗口然后由于没有窗口Vim不久退出了么。

这个时候autocmd BufUnload后面接的命令只对后来打开的文件起作用了。如何让他对所有的buffer都起作用?不知描述清楚没有.....

@Yggdroot
Copy link
Owner

你是想在vim退出后做些事情?
buffer hidden并不会unload。
关闭一个buffer的正确方式是:bd 或:bw,而不是:q, :q是关掉窗口。所以我还是不太清楚你的想法。

@roachsinai
Copy link
Contributor Author

我是在退出vim的时候对每一个buffer都做出一个判断包括hidden buffer.
关闭窗口Vim不是一个个关闭所有的buffer的么?一个个:bd觉得慢嘛不是。

@roachsinai
Copy link
Contributor Author

我先使用:ball再:qa吧:)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants