2015-02-09 3 views
1

У меня есть следующая проблема, или, скажем, идея, с помощью vim. Когда я пишу латексные документы, я хочу автоматически открыть файл ~/.vim/latex_hints, где я собрал некоторые подсказки, ярлыки, обходные пути, ..., в vsplit с правой стороны. Файл подсказки должен быть загружен только для чтения и автоматически закрываться при закрытии латексного документа.VIM: автоматически открывать отдельную справку/подсказку/текстовый файл в vsplit

После нескольких экспериментов я добавил следующие команды для моей vimrc:

function Handletexfile() 
    setlocal cc=80 
    setlocal wrap 
    setlocal textwidth=80 
    belowright vsplit +setl\ ro\ nomodifiable ~/.vim/latex_hints 
endfunction 

autocmd BufRead,BufNewFile *.tex call Handletexfile() 

и

function Handletexfileexit() 
    let tablist = []            
    call extend(tablist, tabpagebuflist(tabpagenr()))   
    for b in tablist 
      echo b . " ". bufname(b) 
      if bufname(b) =~ "vim/.*_hints" 
        echo "Close buffer..". b 
        execute "bdelete! ".b 
      endif 
    endfor 
endfunction 
autocmd BufWinLeave *.* call Handletexfileexit() 

Когда я открываю файл текс, мой файл подсказка отображается на правой стороне, как прочтенное только и не поддаются изменению. Но когда я закрываю использование :q или :wq, буферы, открытые на текущей вкладке, перечислены, а один, соответствующий файлу подсказки, выбирается в инструкции if. Но я получаю следующий результат

1 abstract.tex 
2 ~/.vim/latex_hints 
Close buffer..2 

и мой vim сбой с segfault.

ответ

1

Первая часть вашего требования переводится довольно просто в Vimscript:

autocmd BufWinEnter <buffer> belowright vsplit +setl\ ro ~/.vim/latex_hints 

Поместите это в ~/.vim/after/ftplugin/tex.vim или предварять :autocmd FileType tex к команде выше.

Последняя часть сложнее; на BufWinLeave, вам нужно будет проверить все остальные окна для открытого файла чита с bufwinnr(), перейти к нему (:wincmd w) и :close.

+0

Хорошо, как вы заявили, это решает первую часть моей проблемы. Но я не знаю, как справиться со второй частью. –

+0

Показывая свои попытки и описывая, с какими частями вы сталкиваетесь (возможно, как отдельный вопрос), мы лучше понимаем ваше мастерство и можем дать более точный ответ.Как бы то ни было, это похоже на то, что вы отправили требование и хотите, чтобы кто-то написал вам свой код. Во второй части есть некоторые угловые случаи, которые необходимо учитывать. Если вы придумаете решение самостоятельно, вы можете обращаться с ними по своему усмотрению. Если я просто отправлю одно решение, вы, вероятно, просто вернетесь и пожалуетесь мне. –

+0

Проблема в том, что я всего лишь пользователь vim, а не программист vim. Но я поменял свой пост на материал, который я теперь обнаружил, который выбирает правильный буфер, но не закрывает его правильно. –

0

В качестве альтернативы используйте окно предварительного просмотра с файлом подсказки. Окно предварительного просмотра дает вам некоторые преимущества:

  • Это небольшое и из пути
  • Можно закрыть это легко с помощью <c-w>z из любого другого окна
  • может перейти к окну предварительного просмотра из любого окна легко через <c-w>P (переход через <c-w>p)

Вы можете сделать это с помощью команды :pedit. Например:

autocmd BufWinEnter <buffer> pedit +setl\ ro ~/.vim/latex_hints 

Лично я чувствую, что было бы лучше, чтобы создать команду или отображение, чтобы открыть ваши намеки файлы, как вы можете в конечном итоге из расти файл, как время идет. Я также установил бы 'bufhidden' на wipe и исключил список с 'nobuflisted'.

Вы также можете ознакомиться с получением snippet plugin.

Смежные вопросы