我常用的Vim插件和技巧

Vim、Emacs配置和使用
xlmo
帖子: 19
注册时间: 2005-10-24 17:42
来自: 长沙

#16

帖子 xlmo » 2008-06-30 17:02

乍看好像emacs。。
头像
kofshower
帖子: 1343
注册时间: 2007-03-13 11:23
联系:

#17

帖子 kofshower » 2008-07-20 16:20

代码: 全选

插 入 补 全 弹 出 菜 单                                 *ins-completion-menu*
                                                        *popupmenu-completion*
Vim 可以用更简单的弹出菜单来显示匹配。

当下面条件符合时使用弹出菜单:
- 'completeopt' 选项包含 "menu" 或 "menuone"。
- 显示终端至少支持 8 色。
- 至少有两条匹配项。如果使用 "menuone",一条匹配也可以。

选项 'pumheight' 用于设置最大高度。默认值是使用全部有效空间。

有三个状态:
1. 插入了完整的匹配,例如在 CTRL-N 或 CTRL-P 之后。
2. 用光标键选择其它匹配项。此时不插入该匹配项,只在弹出菜单中高亮选中的条目。
3. 只插入了部分匹配文本,并且已经输入字符或者使用了退格键,这时匹配项列表根据
   光标前的内容进行调整。

开始时你通常处于状态一并插入第一个匹配。如果 'completeopt' 包含了 "longest" 而
且有多个匹配项,那么开始于状态三。

如果选择其它匹配项,例如键入 CTRL-N 或 CTRL-P,就进入了状态一。这不会改变匹配
项列表。

如果退回到原文,就会处于状态三。要立即进入该状态,可以使用快捷键映射方法,该映
射在补全开始后立即使用 CTRL-P:
        :imap <F7> <C-N><C-P>

其中 menu和menuone区别在哪儿?
明白了:

代码: 全选

menu	    Use a popup menu to show the possible completions.  The
		    menu is only shown when there is more than one match and
		    sufficient colors are available.  |ins-completion-menu|

	   menuone  Use the popup menu also when there is only one match.
		    Useful when there is additional information about the
		    match, e.g., what file it comes from.
上次由 kofshower 在 2008-07-20 16:55,总共编辑 1 次。
"We are all in the mud, but some of us are looking at the stars." (Oscar Wilde)
We are not born for ourselves.
人生天地间,并非为自己
Homepage:http://sites.google.com/site/polarisnotme/
头像
kofshower
帖子: 1343
注册时间: 2007-03-13 11:23
联系:

#18

帖子 kofshower » 2008-07-20 16:25

代码: 全选

学到一个技巧
我改了下我的


" mapping
" 如果下拉菜单弹出,回车映射为接受当前所选项目,否则,仍映射为回车;
"
" 如果下拉菜单弹出,CTRL-J映射为在下拉菜单中向下翻页。否则映射为CTRL-X CTRL-O;
"
" 如果下拉菜单弹出,CTRL-K映射为在下拉菜单中向上翻页,否则仍映射为CTRL-K;
"
" 如果下拉菜单弹出,CTRL-U映射为CTRL-E,即停止补全,否则,仍映射为CTRL-U;
inoremap <expr> <CR>       pumvisible()?"\<C-Y>":"\<CR>"
inoremap <expr> <C-J>      pumvisible()?"\<PageDown>\<C-N>\<C-P>":"\<C-X><C-O>"
inoremap <expr> <C-K>      pumvisible()?"\<PageUp>\<C-P>\<C-N>":"\<C-K>"
inoremap <expr> <C-U>      pumvisible()?"\<C-E>":"\<C-U>"a

inoremap <expr> <cr>       pumvisible() ? "\<c-y>" : "\<c-g>u\<cr>"
inoremap <expr> <c-n>      pumvisible() ? "\<c-n>" : "\<c-n>\<c-r>=pumvisible() ? \"\\<down>\" : \"\\<cr>\""
inoremap <expr> <m-;>      pumvisible() ? "\<c-n>" : "\<c-x>\<c-o>\<c-n>\<c-p>\<c-r>=pumvisible() ? \"\\<down>\" : \"\\<cr>\""

这样子更实用些
"We are all in the mud, but some of us are looking at the stars." (Oscar Wilde)
We are not born for ourselves.
人生天地间,并非为自己
Homepage:http://sites.google.com/site/polarisnotme/
头像
kofshower
帖子: 1343
注册时间: 2007-03-13 11:23
联系:

#19

帖子 kofshower » 2008-07-20 16:58

这是针对java的codesnip

代码: 全选

if !exists('loaded_snippet') || &cp
    finish
endif

function! UpFirst()
    return substitute(@z,'.','\u&','')
endfunction

function! JavaTestFileName(type)
    let filepath = expand('%:p')
    let filepath = substitute(filepath, '/','.','g')
    let filepath = substitute(filepath, '^.\(:\\\)\?','','')
    let filepath = substitute(filepath, '\','.','g')
    let filepath = substitute(filepath, ' ','','g')
    let filepath = substitute(filepath, '.*test.','','')
    if a:type == 1
        let filepath = substitute(filepath, '.[A-Za-z]*.java','','g')
    elseif a:type == 2
        let filepath = substitute(filepath, 'Tests.java','','')
    elseif a:type == 3
        let filepath = substitute(filepath, '.*\.\([A-Za-z]*\).java','\1','g')
    elseif a:type == 4
        let filepath = substitute(filepath, 'Tests.java','','')
        let filepath = substitute(filepath, '.*\.\([A-Za-z]*\).java','\1','g')
    elseif a:type == 5
        let filepath = substitute(filepath, 'Tests.java','','')
        let filepath = substitute(filepath, '.*\.\([A-Za-z]*\).java','\1','g')
        let filepath = substitute(filepath, '.','\l&','')
    endif

    return filepath
endfunction

let st = g:snip_start_tag
let et = g:snip_end_tag
let cd = g:snip_elem_delim

exec "Snippet method // {{{ ".st."method".et."<CR>/**<CR> * ".st.et."<CR> */<CR>public ".st."return".et." ".st."method".et."() {<CR>".st.et."}<CR>// }}}<CR>".st.et.""
exec "Snippet jps private static final ".st."string".et." ".st.et." = \"".st.et."\";<CR>".st.et.""
exec "Snippet jtc try {<CR>".st.et."<CR>} catch (".st.et." e) {<CR>".st.et."<CR>} finally {<CR>".st.et."<CR>}<CR>".st.et.""
exec "Snippet jlog /** Logger for this class and subclasses. */<CR><CR>protected final Log log = LogFactory.getLog(getClass());<CR>".st.et.""
exec "Snippet jpv private ".st."string".et." ".st.et.";<CR><CR>".st.et.""
exec "Snippet bean // {{{ set".st."fieldName:UpFirst()".et."<CR>/**<CR> * Setter for ".st."fieldName".et.".<CR> * @param new".st."fieldName:UpFirst()".et." new value for ".st."fieldName".et."<CR> */<CR>public void set".st."fieldName:UpFirst()".et."(".st."String".et." new".st."fieldName:UpFirst()".et.") {<CR>".st."fieldName".et." = new".st."fieldName:UpFirst()".et.";<CR>}<CR>// }}}<CR><CR>// {{{ get".st."fieldName:UpFirst()".et."<CR>/**<CR> * Getter for ".st."fieldName".et.".<CR> * @return ".st."fieldName".et." */<CR>public ".st."String".et." get".st."fieldName:UpFirst()".et."() {<CR>return ".st."fieldName".et.";<CR>}<CR>// }}}<CR>".st.et.""
exec "Snippet jwh while (".st.et.") { // ".st.et."<CR><CR>".st.et."<CR><CR>}<CR>".st.et.""
exec "Snippet sout System.out.println(\"".st.et."\");".st.et.""
exec "Snippet jtest package ".st."j:JavaTestFileName(1)".et."<CR><CR>import junit.framework.TestCase;<CR>import ".st."j:JavaTestFileName(2)".et.";<CR><CR>/**<CR> * ".st."j:JavaTestFileName(3)".et."<CR> *<CR> * @author ".st.et."<CR> * @since ".st.et."<CR> */<CR>public class ".st."j:JavaTestFileName(3)".et." extends TestCase {<CR><CR>private ".st."j:JavaTestFileName(4)".et." ".st."j:JavaTestFileName(5)".et.";<CR><CR>public ".st."j:JavaTestFileName(4)".et." get".st."j:JavaTestFileName(4)".et."() { return this.".st."j:JavaTestFileName(5)".et."; }<CR>public void set".st."j:JavaTestFileName(4)".et."(".st."j:JavaTestFileName(4)".et." ".st."j:JavaTestFileName(5)".et.") { this.".st."j:JavaTestFileName(5)".et." = ".st."j:JavaTestFileName(5)".et."; }<CR><CR>public void test".st.et."() {<CR>".st.et."<CR>}<CR>}<CR>".st.et.""
exec "Snippet jif if (".st.et.") { // ".st.et."<CR>".st.et."<CR>}<CR>".st.et.""
exec "Snippet jelse if (".st.et.") { // ".st.et."<CR><CR>".st.et."<CR><CR>} else { // ".st.et."<CR>".st.et."<CR>}<CR>".st.et.""
exec "Snippet jpm /**<CR> * ".st.et."<CR> *<CR> * @param ".st.et." ".st.et."<CR> * ".st.":D('@return')".et." ".st.et."<CR> */<CR>private ".st."void".et." ".st.et."(".st."String".et." ".st.et.") {<CR><CR>".st.et."<CR><CR>}<CR>".st.et.""
exec "Snippet main public main static void main(String[] ars) {<CR>".st."\"System.exit(0)\"".et.";<CR>}<CR>".st.et.""
exec "Snippet jpum /**<CR> * ".st.et."<CR> *<CR> * @param ".st.et." ".st.et."<CR> *".st.":D('@return')".et." ".st.et."<CR> */<CR>public ".st."void".et." ".st.et."(".st."String".et." ".st.et.") {<CR><CR>".st.et."<CR><CR>}<CR>".st.et.""
exec "Snippet jcout <c:out value=\"${".st.et."}\" />".st.et.""
"We are all in the mud, but some of us are looking at the stars." (Oscar Wilde)
We are not born for ourselves.
人生天地间,并非为自己
Homepage:http://sites.google.com/site/polarisnotme/
seenxu
帖子: 229
注册时间: 2008-04-26 7:47
来自: 德国 斯图加特

#20

帖子 seenxu » 2008-07-20 17:17

好贴!
欢迎访问斯图论坛 stu-cn.de
wwbdos
帖子: 25
注册时间: 2008-05-13 14:36

#21

帖子 wwbdos » 2008-07-28 5:51

学习中~~~~
fvwmnet
帖子: 31
注册时间: 2008-09-30 7:28

Re: 我常用的Vim插件和技巧

#22

帖子 fvwmnet » 2008-10-26 8:16

snippest 也太不友好了。定义麻烦。
其他插件好多了。
iheartpp
帖子: 133
注册时间: 2008-09-18 20:15

Re:

#23

帖子 iheartpp » 2008-11-16 1:00

anticlockwise 写了:
ciclo 写了:楼主的latex-suit里:make管用吗?
不懂你指的make管用否是指什么?我装了Latex-Suite后在命令模式下敲make照样会调用make;在Latex状态下敲入make会调用latex,不过我基本不这么用,因为直接按\ll就可以调用latex来编译当前文件,然后我自己定义了几个命令来生成PDF文件
有几个问题请教一下:

怎么自定义几个命令生成PDF?分享一下OK :em01

如何自定义vim的快捷键?比如将<F1>设定成自动编译以代替\ll而不是探出帮助?
laoli_no1
帖子: 154
注册时间: 2008-10-28 17:17

Re: 我常用的Vim插件和技巧

#24

帖子 laoli_no1 » 2008-11-29 11:42

请问一下,怎么才能让vtreeexplorer直接在左边显示阿?
头像
anticlockwise
帖子: 2394
注册时间: 2007-03-01 20:46
来自: 湖南长沙

Re: Re:

#25

帖子 anticlockwise » 2008-11-30 8:51

iheartpp 写了:
anticlockwise 写了:
ciclo 写了:楼主的latex-suit里:make管用吗?
不懂你指的make管用否是指什么?我装了Latex-Suite后在命令模式下敲make照样会调用make;在Latex状态下敲入make会调用latex,不过我基本不这么用,因为直接按\ll就可以调用latex来编译当前文件,然后我自己定义了几个命令来生成PDF文件
有几个问题请教一下:

怎么自定义几个命令生成PDF?分享一下OK :em01

如何自定义vim的快捷键?比如将<F1>设定成自动编译以代替\ll而不是探出帮助?
首先,我用的是LatexSuite vim插件,按\ll就可以编译latex,编译之后,我自己定义了几个命令来生成PS或者PDF(有一个缺陷,必须和DVI在同一目录底下)

代码: 全选

command DviPdf :! dvipdfmx %:r.dvi
command DviPs :! dvips %:r.dvi
command PsPdf :! ps2pdf %:r.ps
头像
anticlockwise
帖子: 2394
注册时间: 2007-03-01 20:46
来自: 湖南长沙

Re: 我常用的Vim插件和技巧

#26

帖子 anticlockwise » 2008-11-30 8:52

laoli_no1 写了:请问一下,怎么才能让vtreeexplorer直接在左边显示阿?
敲入:VSTreeExplore
阿朱mail
帖子: 2
注册时间: 2010-12-01 21:24

Re: 我常用的Vim插件和技巧

#27

帖子 阿朱mail » 2010-12-15 13:43

anticlockwise, 问个问题,为什么我用编译命令的时候提示UTF8不能映射字符??
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 我常用的Vim插件和技巧

#28

帖子 我就是我2 » 2010-12-25 4:48

以后有用,先收藏
:em11
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
sevenzero
帖子: 10
注册时间: 2009-04-16 23:29
系统: XUbuntu 12.04

Re: 我常用的Vim插件和技巧

#29

帖子 sevenzero » 2014-05-29 10:34

学习啦.
回复