weixin_39975868
weixin_39975868
2020-12-25 17:18

コマンドラインに対して ':wincmd _' が効いてしまう

スクリーンショット

再現した後にGVimのウインドウ(≠Vimのwindow)を最大化するとコマンドラインは元のcmdheightの高さに戻ります。 GUI版と端末版の両方で再現しました。

GUI版 端末版

再現スクリプト


$ C:\home\vim74-kaoriya-win32\gvim.exe -u NONE -i NONE -S window-bug.vim
 viml
function! s:run()
    let save_winwidth = winwidth(0)
    let save_winheight = winheight(0)
    belowright vertical help
    execute save_winwidth / 3 'wincmd |'
    execute save_winheight / 2 'wincmd _'
endfunction
call s:run()

OS・Vimのバージョン

OS: Windows 8.1 32bit Vim: GVim/Vim Kaoriya版 7.4.648 (GUI版と端末版の両方で再現)


VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Mar  1 2015 11:39:05)
MS-Windows 32 ビット GUI 版
適用済パッチ: 1-648
Modified by koron.kaoriya.com
Compiled by koron.kaoriya.com
Huge 版 with GUI.  機能の一覧 有効(+)/無効(-)
+acl                +conceal            +extra_search       +kaoriya            +multi_byte_ime/dyn +reltime            -tcl                +wildmenu
+arabic             +cryptv             +farsi              +langmap            +multi_lang         +rightleft          -tgetent            +windows
+autocmd            +cscope             +file_in_path       +libcall            -mzscheme           +ruby/dyn           -termresponse       +writebackup
+balloon_eval       +cursorbind         +find_in_path       +linebreak          +netbeans_intg      +scrollbind         +textobjects        -xfontset
+browse             +cursorshape        +float              +lispindent         -ole                +signs              +title              -xim
++builtin_terms     +dialog_con_gui     +folding            +listcmds           +path_extra         +smartindent        +toolbar            -xterm_save
+byte_offset        +diff               -footer             +localmap           +perl/dyn           -sniff              +user_commands      +xpm_w32
+cindent            +digraphs           +gettext/dyn        +lua/dyn            +persistent_undo    +startuptime        +vertsplit          
+clientserver       +directx            +guess_encode       +menu               -postscript         +statusline         +virtualedit        
+clipboard          -dnd                -hangul_input       +migemo/dyn         +printer            -sun_workshop       +visual             
+cmdline_compl      -ebcdic             +iconv/dyn          +mksession          +profile            +syntax             +visualextra        
+cmdline_hist       +emacs_tags         +insert_expand      +modify_fname       +python/dyn         +tag_binary         +viminfo            
+cmdline_info       +eval               +jumplist           +mouse              +python3/dyn        +tag_old_static     +vreplace           
+comments           +ex_extra           +keymap             +mouseshape         +quickfix           -tag_any_white      +wildignore         
      システム vimrc: "$VIM\vimrc"
        ユーザ vimrc: "$HOME\_vimrc"
     第2ユーザ vimrc: "$HOME\vimfiles\vimrc"
     第3ユーザ vimrc: "$VIM\_vimrc"
         ユーザ exrc: "$HOME\_exrc"
      第2ユーザ exrc: "$VIM\_exrc"
     システム gvimrc: "$VIM\gvimrc"
       ユーザ gvimrc: "$HOME\_gvimrc"
    第2ユーザ gvimrc: "$HOME\vimfiles\gvimrc"
    第3ユーザ gvimrc: "$VIM\_gvimrc"
    システムメニュー: "$VIMRUNTIME\menu.vim"
コンパイル: cl -c /W3 /nologo  -I. -Iproto -DHAVE_PATHDEF -DWIN32   -DFEAT_CSCOPE -DFEAT_NETBEANS_INTG   -DFEAT_XPM_W32  /DMODIFIED_BY=\"koron.kaoriya.com\" /DDYNAMIC_MSVCRT_DLL=\"msvcr100.dll\" /DGETTEXT_DLL=\"intl.dll\" /D_BIND_TO_CURRENT_VCLIBS_VERSION=1 /D_USE_32BIT_TIME_T=1 -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 /Fo.\ObjGXULYHRi386/ /Ox /GL -DNDEBUG /MD -DFEAT_MBYTE_IME -DDYNAMIC_IME -DFEAT_GUI_W32 -DFEAT_DIRECTX -DDYNAMIC_DIRECTX -DDYNAMIC_ICONV -DDYNAMIC_GETTEXT -DDYNAMIC_MIGEMO -DFEAT_LUA -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua51.dll\" -DFEAT_PYTHON -DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL=\"python27.dll\" -DFEAT_PYTHON3 -DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL=\"python34.dll\" -DFEAT_PERL -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl520.dll\" -DFEAT_RUBY -DDYNAMIC_RUBY -DDYNAMIC_RUBY_VER=20 -DDYNAMIC_RUBY_DLL=\"msvcrt-ruby200.dll\" -DFEAT_HUGE /Fd.\ObjGXULYHRi386/ /Zi
リンク: link /RELEASE /nologo /subsystem:windows /LTCG:STATUS oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib  comdlg32.lib ole32.lib uuid.lib /machine:i386 /nodefaultlib gdi32.lib version.lib   winspool.lib comctl32.lib advapi32.lib shell32.lib  /machine:i386 /nodefaultlib msvcrt.lib   user32.lib   /nodefaultlib:lua51.lib   /nodefaultlib:python27.lib /nodefaultlib:python34.lib    WSock32.lib ..\..\contrib\xpm\x86\lib\libXpm.lib /PDB:gvim.pdb -debug

该提问来源于开源项目:vim-jp/issues

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • weixin_39624360 weixin_39624360 4月前

    こんにちは。 これはどうやら単純にシングルウィンドウからの :10wincmd _ などでも似たようなことになるようです。 同じの問題だと考えると、おそらく

    window.c frame_setheight() 内 5215L 付近 (Vim 7.4.538)

     c
        if (curfrp->fr_parent == NULL)
        {
            /* topframe: can only change the command line */
            if (height > ROWS_AVAIL)
                height = ROWS_AVAIL;
            if (height > 0)
                frame_new_height(curfrp, height, FALSE, FALSE);
        }
    

    あたりの話ではないかと。 frame_setheight() は FEAT_WINDOWS or PROTO の場合なので Windows のみに影響しそうです。

    ここで frame_setheight() を呼ばないようにすれば、コマンドラインには影響は出なくなるのですが topframe: can only change the command line と書かれているので直して良いのかは分かりません^^; (なにか意図があってそうしているのかも?)

    あと、ざっと見た感じでは副作用はなさそうに見えるのですが 本当に影響がないのかウィンドウ分割の全パターンのテストが結構面倒そう。。。

    点赞 评论 复制链接分享
  • weixin_39730587 weixin_39730587 4月前

    only one window と書いてありますがそこは適当に流してもらって、これだと思います。

    
    windows.txt:569
    
    If there is only one window, resizing that window will also change the command
    line height.  If there are several windows, resizing the current window will
    also change the height of the window below it (and sometimes the window above
    it).
    
    点赞 评论 复制链接分享
  • weixin_39624360 weixin_39624360 4月前

    一部誤りがあったので訂正。

    ここで frame_setheight() を呼ばないようにすれば、コマンドラインには影響は出なくなるのですが

    frame_new_height() を呼ばないように、の間違いです。

    topframe: can only change the command line と書かれているので直して良いのかは分かりません^^; (なにか意図があってそうしているのかも?)

    でもまあ、コマンドラインが変わっちゃうのは仕様?っぽいですね。

    点赞 评论 复制链接分享
  • weixin_39975868 weixin_39975868 4月前

    なるほど…仕様ですか。 ありがとうございます。

    点赞 评论 复制链接分享