Home > Enterprise >  Build a custom vim binary with python support and syntax highlighting
Build a custom vim binary with python support and syntax highlighting

Time:10-25

Background

The Debian 11 vim package doesn't include python3 support. See the section titled "No python support in Debian 11 vim - evidence" below

I need vim with python3 support for the YouCompleteMe vim plugin. Syntax highlighting is also required. To build a new vim, I downloaded the vim 9.0 tarball into /opt/ on my Debian 11 system and extracted it... explicitly:

$ cd /opt
$ sudo wget http://ftp.vim.org/pub/pub/vim/unix/vim-9.0.tar.bz2
$ sudo bunzip2 ./vim-9.0.tar.bz2
$ sudo chown -R mpenning:mpenning vim/

I built it with...

$ cd /opt/vim
$ ./configure \
 --enable-python3interp=yes \
 --with-python3-command=python3.9 \
 --with-features=huge \
 --with-compiledby="[email protected]"
$ make
$ sudo cp src/vim /usr/bin/vim

However, now I see these errors when I start vim...

$ vim foo.py
2022-10-24 09:08:31 [INFO] Editing 'foo.py'.
failed to load colors/lists/default.vim
failed to load colors/lists/default.vim
Press ENTER or type command to continue

As one might expect, I get no vim syntax highlighting when I see the errors listed above. Just for kicks, I tried this in my vim session:

  • :syntax enable
  • :colorscheme default
  • :filetype plugin on

Predictably, that doesn't help.

Question

How can I build a Debian vim binary with python3 and syntax highlighting support?

No python support in Debian 11 vim - evidence

$ 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 team [email protected]
Compiled by team [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
$

CodePudding user response:

I need vim with python syntax highlighting

Python syntax highlighting is built-in so you don't need to build Vim manually to get it. You are wasting your and everyone's time.

"Python support" is unrelated to syntax highlighting. It refers to the Python scripting interface that allow users to (partially) write Vim plugins in Python. Having -python or -python3 in :version has zero incidence on Vim's ability to highlight Python.

FWIW, you don't have to build a new vim binary if you install the vim-nox Debian package instead of depending on the vim Debian package. vim-nox embeds several scripting languages in the vim.nox binary build.

CodePudding user response:

Debian 11 vim most certainly supports Python 3:

$ cat /etc/issue
Debian GNU/Linux 11

$ vim --version | grep -F python
 comments           libcall           -python             visual
 conceal            linebreak          python3            visualextra

The package to apt install is vim, not vim-tiny, that's all.

CodePudding user response:

It seems that I have to set $VIMRUNTIME to my new vim/runtime source directory when I try to edit with the new vim binary... Setting this in my ~/.bashrc fixed the problem...

export VIMRUNTIME="/opt/vim/runtime/"

Now I have vim with both python3 and functional syntax highlighting.

  • Related