当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : vim怎样可以以noma设置打开preview-window
帖子发表于 : 2010-12-19 20:17 
头像

注册: 2007-03-24 23:45
帖子: 2357
送出感谢: 0 次
接收感谢: 9
我写代码的时候,想看定义,但是不想在本窗口跳过去,于是用preview窗口显示,但是这个preview窗口是打开了另外一个文件,于是会生成.swp文件
但是这个有想要看的函数定义的这个文件已经被另外一个vim打开了,于是会弹出个窗口警告说已经有了.swp啥的,很烦!
既然是preview窗口,还修改个毛啊,直接用vim -M这类打开不就行了,那就不会生成.swp了,上面的情况下也不会有警告了。

问题是,怎么实现啊?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: vim怎样可以以noma设置打开preview-window
帖子发表于 : 2010-12-19 20:50 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
设置 swapfile 选项?使用 SwapExists 事件?设成只读?不打开实际的文件而是使用 nofile 类型的 buffer,然后使用 :r 读取信息?


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
3 楼 
 文章标题 : Re: vim怎样可以以noma设置打开preview-window
帖子发表于 : 2010-12-19 22:51 
头像

注册: 2007-03-24 23:45
帖子: 2357
送出感谢: 0 次
接收感谢: 9
lilydjwg 写道:
设置 swapfile 选项?使用 SwapExists 事件?设成只读?不打开实际的文件而是使用 nofile 类型的 buffer,然后使用 :r 读取信息?

我现在用ctrl-w_}来跳标签,但是貌似没有选择可以控制这个行为为只读打开


页首
 用户资料  
 
4 楼 
 文章标题 : Re: vim怎样可以以noma设置打开preview-window
帖子发表于 : 2010-12-20 11:22 
头像

注册: 2007-03-24 23:45
帖子: 2357
送出感谢: 0 次
接收感谢: 9
暂时的实现,先设置shm+=A,打开后跳到预览窗口设置一堆东西,令其不许修改,没有swp文件等等,再跳回来,暂时算是实现了
但是我有点担心消除已有交换文件的警告,默认到底是什么操作,测试表明是只读打开,但是仍然不放心啊

以下代码改自帮助文件某个函数,实现按<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就够了


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译