在任何:edit命令之后重新加载.vimrc

dat*_*dan 1 vim editor

我的.vimrc文件中有一个部分,它将终端的标题设置为使用vim打开的文件的名称.但是,当使用:edit从vim中的一个文件转到下一个文件时会出现故障,因为它保持不变.我认为这是因为,默认情况下,.vimrc文件仅在启动vim时运行.

有没有办法让vim"监视":edit,:e和任何其他命令,然后运行:so $MYVIMRC,重新加载.vimrc?

或者,是否有一些内置功能将终端标题设置为我忽略的文件名?


.vimrc中提到的部分

  " Apply filename to terminal session title
  "" Doesn't work when changing file using :edit

  let path_list = reverse(split(expand("%:p"),"/"))

  if len(path_list) > 0
     let &titlestring = path_list[0]
      if &term == "screen"
          set t_ts=^[k
          set t_fs=^[\
      endif
      if &term == "screen" || &term == "xterm"
        set title
      endif
 endif
Run Code Online (Sandbox Code Playgroud)

dat*_*dan 5

这样做了

autocmd BufEnter * :so $MYVIMRC
Run Code Online (Sandbox Code Playgroud)

更新

正如Doktor所建议的那样,最好在函数中执行此操作,并在BufEnter上调用它.这是如何工作的.


function SetTitle()
    let path_list = reverse(split(expand("%:p"),"/"))

    if len(path_list) > 0
        let &titlestring = path_list[1] . "/" . path_list[0]
        if &term == "screen"
            set t_ts=^[k
            set t_fs=^[\
        endif
        if &term == "screen" || &term == "xterm"
          set title
        endif
    endif
endfunction

autocmd BufEnter * :call SetTitle()
Run Code Online (Sandbox Code Playgroud)

  • 您应该将逻辑放在一个函数中,并调用autocmd中的函数而不是重新加载整个vimrc (2认同)