我写代码的时候,想看定义,但是不想在本窗口跳过去,于是用preview窗口显示,但是这个preview窗口是打开了另外一个文件,于是会生成.swp文件
但是这个有想要看的函数定义的这个文件已经被另外一个vim打开了,于是会弹出个窗口警告说已经有了.swp啥的,很烦!
既然是preview窗口,还修改个毛啊,直接用vim -M这类打开不就行了,那就不会生成.swp了,上面的情况下也不会有警告了。
问题是,怎么实现啊?
vim怎样可以以noma设置打开preview-window
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: vim怎样可以以noma设置打开preview-window
设置 swapfile 选项?使用 SwapExists 事件?设成只读?不打开实际的文件而是使用 nofile 类型的 buffer,然后使用 :r 读取信息?
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: vim怎样可以以noma设置打开preview-window
我现在用ctrl-w_}来跳标签,但是貌似没有选择可以控制这个行为为只读打开lilydjwg 写了:设置 swapfile 选项?使用 SwapExists 事件?设成只读?不打开实际的文件而是使用 nofile 类型的 buffer,然后使用 :r 读取信息?
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: vim怎样可以以noma设置打开preview-window
暂时的实现,先设置shm+=A,打开后跳到预览窗口设置一堆东西,令其不许修改,没有swp文件等等,再跳回来,暂时算是实现了
但是我有点担心消除已有交换文件的警告,默认到底是什么操作,测试表明是只读打开,但是仍然不放心啊
以下代码改自帮助文件某个函数,实现按<CR>后预览函数定义,类似source insight那个预览窗口
---------------------
不好用,临时设置个set shm+=A就够了
但是我有点担心消除已有交换文件的警告,默认到底是什么操作,测试表明是只读打开,但是仍然不放心啊
以下代码改自帮助文件某个函数,实现按<CR>后预览函数定义,类似source insight那个预览窗口
代码: 全选
nnoremap <CR> :call PreviewWord()<CR>
function! PreviewWord()
if &previewwindow
let flag = 1
else
let flag = 0
endif
let w = expand("<cword>") " 在当前光标位置抓词
if w =~ '\a' " 如果该单词包括一个字母
" 在显示下一个标签之前,删除所有现存的语法高亮
" silent! wincmd P " 跳转至预览窗口
" if &previewwindow " 如果确实转到了预览窗口……
" match none " 删除语法高亮
" wincmd p " 回到原来的窗口
" endif
" 试着显示当前光标处匹配的标签
" try
" exe "ptag " . w
" catch
" return
" endtry
let l:temp = &shm
set shm+=A
if &filetype == "help"
exe "normal! \<C-w>}"
else
exe "ptag " . w
endif
let &shm = l:temp
let orgWinnr = winnr()
silent! wincmd P " 跳转至预览窗口
if &previewwindow " 如果确实转到了预览窗口……
setlocal buftype=nowrite
setlocal bufhidden=delete
setlocal noswapfile
setlocal nobuflisted
if has("folding")
silent! .foldopen " 展开折叠的行
endif
" call search("$", "b") " 到前一行的行尾
let w = substitute(w, '\\', '\\\\', "")
" call search('\<\V' . w . '\>') " 定位光标在匹配的单词上
call search('\<\V' . w . '\>', "c") " 定位光标在匹配的单词上
" 给在此位置的单词加上匹配高亮
hi previewWord gui=bold guifg=cyan1 guibg=#445599 term=bold ctermbg=green
exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'
exe "normal! zz"
if flag == 0
" 返回原来的窗口
execute orgWinnr . "wincmd w"
endif
endif
endif
endf
不好用,临时设置个set shm+=A就够了