提问人:jamiet 提问时间:11/15/2023 更新时间:11/15/2023 访问量:48
如何在 mac 上获得漂亮的 git 编辑器体验,就像在 devcontainers 中一样?
How do I get a pretty git editor experience on mac like I do in devcontainers?
问:
我是 Visual Studio Code 开发容器的狂热用户,原因之一是我可以轻松获得非常漂亮的 git 编辑体验,用于编写提交消息和变基等操作。
我知道这种颜色编码是通过开发容器功能提供的,ghcr.io/guiyomh/features/vim。这是我devcontainer.json:vim
{
"name": "testgiteditor",
"image": "mcr.microsoft.com/devcontainers/base:bullseye",
"features": {
"ghcr.io/guiyomh/features/vim": {}
}
}
devcontainer 功能只不过是安装脚本的包装器,在这种情况下,该安装脚本是 https://github.com/guiyomh/features/blob/main/src/vim/install.sh。该脚本似乎没有做任何特别的事情,它基本上可以运行apt-get -y install --no-install-recommends vim
我想在我的主机(即 mac)上获得相同的体验,但简单地安装 vim 并不能提供相同的体验
我不明白在我的容器中安装vim有什么特别之处,它提供了这种漂亮的体验。有谁知道我如何在主机 Mac 上获得相同的体验?
如果有帮助,以下是容器中的输出:vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Oct 01 2021 01:51:08)
Included patches: 1-2434
Extra patches: 8.2.3402, 8.2.3403, 8.2.3409, 8.2.3428
Modified by [email protected]
Compiled by [email protected]
Huge version without GUI. Features included (+) or not (-):
+acl -farsi +mouse_sgr +tag_binary
+arabic +file_in_path -mouse_sysmouse -tag_old_static
+autocmd +find_in_path +mouse_urxvt -tag_any_white
+autochdir +float +mouse_xterm -tcl
-autoservername +folding +multi_byte +termguicolors
-balloon_eval -footer +multi_lang +terminal
+balloon_eval_term +fork() -mzscheme +terminfo
-browse +gettext +netbeans_intg +termresponse
++builtin_terms -hangul_input +num64 +textobjects
+byte_offset +iconv +packages +textprop
+channel +insert_expand +path_extra +timers
+cindent +ipv6 -perl +title
-clientserver +job +persistent_undo -toolbar
-clipboard +jumplist +popupwin +user_commands
+cmdline_compl +keymap +postscript +vartabs
+cmdline_hist +lambda +printer +vertsplit
+cmdline_info +langmap +profile +virtualedit
+comments +libcall -python +visual
+conceal +linebreak -python3 +visualextra
+cryptv +lispindent +quickfix +viminfo
+cscope +listcmds +reltime +vreplace
+cursorbind +localmap +rightleft +wildignore
+cursorshape -lua -ruby +wildmenu
+dialog_con +menu +scrollbind +windows
+diff +mksession +signs +writebackup
+digraphs +modify_fname +smartindent -X11
-dnd +mouse -sound -xfontset
-ebcdic -mouseshape +spell -xim
+emacs_tags +mouse_dec +startuptime -xpm
+eval +mouse_gpm +statusline -xsmp
+ex_extra -mouse_jsbterm -sun_workshop -xterm_clipboard
+extra_search +mouse_netterm +syntax -xterm_save
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
defaults file: "$VIMRUNTIME/defaults.vim"
fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -Wdate-time -g -O2 -ffile-prefix-map=/build/vim-DtwDbo/vim-8.2.2434=. -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: gcc -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lm -ltinfo -lselinux -lacl -lattr -lgpm -ldl
这是在我的 Mac 上运行相同的输出:
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Oct 19 2023 08:52:34)
macOS version - x86_64
Included patches: 1-2049
Compiled by Homebrew
Huge version without GUI. Features included (+) or not (-):
+acl +file_in_path +mouse_urxvt -tag_any_white
+arabic +find_in_path +mouse_xterm -tcl
+autocmd +float +multi_byte +termguicolors
+autochdir +folding +multi_lang +terminal
-autoservername -footer -mzscheme +terminfo
-balloon_eval +fork() +netbeans_intg +termresponse
+balloon_eval_term +gettext +num64 +textobjects
-browse -hangul_input +packages +textprop
++builtin_terms +iconv +path_extra +timers
+byte_offset +insert_expand +perl +title
+channel +ipv6 +persistent_undo -toolbar
+cindent +job +popupwin +user_commands
-clientserver +jumplist +postscript +vartabs
+clipboard +keymap +printer +vertsplit
+cmdline_compl +lambda +profile +vim9script
+cmdline_hist +langmap -python +viminfo
+cmdline_info +libcall +python3 +virtualedit
+comments +linebreak +quickfix +visual
+conceal +lispindent +reltime +visualextra
+cryptv +listcmds +rightleft +vreplace
+cscope +localmap +ruby +wildignore
+cursorbind +lua +scrollbind +wildmenu
+cursorshape +menu +signs +windows
+dialog_con +mksession +smartindent +writebackup
+diff +modify_fname +sodium -X11
+digraphs +mouse +sound -xattr
-dnd -mouseshape +spell -xfontset
-ebcdic +mouse_dec +startuptime -xim
+emacs_tags -mouse_gpm +statusline -xpm
+eval -mouse_jsbterm -sun_workshop -xsmp
+ex_extra +mouse_netterm +syntax -xterm_clipboard
+extra_search +mouse_sgr +tag_binary -xterm_save
-farsi -mouse_sysmouse -tag_old_static
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
defaults file: "$VIMRUNTIME/defaults.vim"
fall-back for $VIM: "/usr/local/share/vim"
Compilation: clang -c -I. -Iproto -DHAVE_CONFIG_H -DMACOS_X -DMACOS_X_DARWIN -g -O2 -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: clang -L/usr/local/lib -o vim -lm -lncurses -lsodium -liconv -lintl -framework AppKit -L/usr/local/opt/lua/lib -llua5.4 -mmacosx-version-min=13.5 -fstack-protector-strong -L/usr/local/lib -L/usr/local/opt/perl/lib/perl5/5.38/darwin-thread-multi-2level/CORE -lperl -L/usr/local/opt/[email protected]/Frameworks/Python.framework/Versions/3.12/lib/python3.12/config-3.12-darwin -lpython3.12 -framework CoreFoundation -lruby.3.2 -L/usr/local/Cellar/ruby/3.2.2_1/lib
答:
好吧,这个很有趣。
引用我自己的话:
很长一段时间以来,Vim 的 spartan 默认值一直是一个有争议的话题,在 Vim 7.4 和 Vim 8.0 的发布之间已经决定为新手提供更用户友好的基础设置。设计的方案是,如果在通常的位置找不到,则以静默方式获取特定的运行时文件(见上文)。事实上,它按预期工作:只需在没有自定义配置的情况下启动 Vim,就能真正提供比以前更舒适的体验。
defaults.vim
vimrc
其中一项公认的有用功能是语法突出显示。这是您在 devcontainer 中习惯的。defaults.vim
当时,新方案并没有受到社区的欢迎,因为虽然它确实为新的视频提供了更好的开箱即用体验,但它打破了几个长期建立的期望,特别是在与 vi 的兼容性方面。
仍然引用我自己的话:
该方案的众多麻烦之一是,开始掌握 Vim 的终生旅程意味着创建自己的 ,这实际上禁用了 。这使新用户处于比以前更糟糕的境地:每个人都喜欢讨厌斯巴达式的默认值,并且不知道如何找回他们习惯的公认有用的东西,因为几乎是一个黑匣子。干得好!
vimrc
defaults.vim
defaults.vim
:help defaults.vim
如果您不喜欢该机制,则提供了一种禁用该机制的简单方法:
let skip_defaults_vim = 1
事实证明,苹果公司负责 Vim 软件包的人似乎并不是特别喜欢它,从中可以看出:/usr/share/vim/vimrc
" Configuration file for vim
set modelines=0 " CVE-2007-2438
" Normally we use vim-extensions. If you want true vi-compatibility
" remove change the following statements
set nocompatible " Use Vim defaults instead of 100% vi compatibility
set backspace=2 " more powerful backspacing
" Don't write backup file if vim is being called by "crontab -e"
au BufWrite /private/tmp/crontab.* set nowritebackup nobackup
" Don't write backup file if vim is being called by "chpass"
au BufWrite /private/etc/pw.* set nowritebackup nobackup
let skip_defaults_vim=1
现在,您的机器上似乎至少有两个 Vim:默认的 Vim 位于 ,其运行时目录位于 ,而 Homebrew 的 则位于 ,其运行时目录位于 。/usr/bin/vim
/usr/share/vim
/opt/homebrew/bin/vim
/opt/homebrew/Cellar/vim/<version>/share/vim/vim90
这就是事情变得有点复杂的地方。如上图所示,系统默认使用 Vim,禁用并因此进行语法高亮显示。但是 Homebrew Vim 没有附带系统,所以它应该默认启用语法高亮。vimrc
defaults.vim
vimrc
由于默认情况下没有启用语法高亮显示,这可能意味着 Git 使用的是默认的 Vim,而不是 Hombrew Vim。
我可以看到两种解决方案......
将 Git 配置为使用 Homebrew Vim 作为 .
core.editor
或者创建一个包含以下内容(并选择性地摆脱 Homebrew Vim),如下所示:
~/.vimrc
:help defaults.vim
unlet! skip_defaults_vim source $VIMRUNTIME/defaults.vim
评论
which vim
:echo $VIMRUNTIME
如果默认情况下未打开,只需调用(作为命令或在 中)即可启用语法突出显示。请参阅以供参考。:syntax enable
vimrc
:help :syntax-enable
同时,romainl彻底的根本原因分析仍然有效。我也同意写自己的文章是学习 Vim 的必要步骤。vimrc
评论