I want colocolumn to be 80 by default for all buffers, but if textwidth is set (and not 0) for a buffer, then I want colorcolumn to be +0.I know this could be done by just setting tw to 80 in my .vimrc but I do not want a max line length because the auto line breaks can easily lead to syntax errors.I have tried using an autocmd to set the colorcolumn option whenever the tw changes but the problem with this is that the OptionSet event does not fire when vim starts up, so any tw settings by some file-type plugin would not change the colorcolumn setting.autocmd! OptionSet textwidth call s:SetColorColumn()function! s:SetColorColumn()    if &textwidth == 0        setlocal colorcolumn=80    else        setlocal colorcolumn=+0    endifendfunctionWhen using the FileType event, the problem is similar. Although it fires on startup it fires when the filetype is set but before the ftplugin files were sourced so the tw was not yet set.Is there any way I can accomplish this or will I just have to set textwidth or just live with colorcolumn being 80 all the time?I'm using vim 8.0.0086 from the terminal.And here is the output of vim --version (just in case):VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Nov 15 2016 18:04:06)Included patches: 1-86Compiled by Arch LinuxHuge version with GTK2 GUI.  Features included (+) or not (-):+acl             +file_in_path    +mouse_sgr       +tag_old_static+arabic          +find_in_path    -mouse_sysmouse  -tag_any_white+autocmd         +float           +mouse_urxvt     +tcl/dyn+balloon_eval    +folding         +mouse_xterm     +termguicolors+browse          -footer          +multi_byte      +terminfo++builtin_terms  +fork()          +multi_lang      +termresponse+byte_offset     +gettext         -mzscheme        +textobjects+channel         -hangul_input    +netbeans_intg   +timers+cindent         +iconv           +num64           +title+clientserver    +insert_expand   +packages        +toolbar+clipboard       +job             +path_extra      +user_commands+cmdline_compl   +jumplist        +perl/dyn        +vertsplit+cmdline_hist    +keymap          +persistent_undo +virtualedit+cmdline_info    +lambda          +postscript      +visual+comments        +langmap         +printer         +visualextra+conceal         +libcall         +profile         +viminfo+cryptv          +linebreak       +python/dyn      +vreplace+cscope          +lispindent      +python3/dyn     +wildignore+cursorbind      +listcmds        +quickfix        +wildmenu+cursorshape     +localmap        +reltime         +windows+dialog_con_gui  +lua/dyn         +rightleft       +writebackup+diff            +menu            +ruby/dyn        +X11+digraphs        +mksession       +scrollbind      -xfontset+dnd             +modify_fname    +signs           +xim-ebcdic          +mouse           +smartindent     -xpm+emacs_tags      +mouseshape      +startuptime     +xsmp_interact+eval            +mouse_dec       +statusline      +xterm_clipboard+ex_extra        +mouse_gpm       -sun_workshop    -xterm_save+extra_search    -mouse_jsbterm   +syntax          +farsi           +mouse_netterm   +tag_binary         system vimrc file: /etc/vimrc     user vimrc file: $HOME/.vimrc 2nd user vimrc file: ~/.vim/vimrc      user exrc file: $HOME/.exrc  system gvimrc file: /etc/gvimrc    user gvimrc file: $HOME/.gvimrc2nd user gvimrc file: ~/.vim/gvimrc       defaults file: $VIMRUNTIME/defaults.vim    system menu file: $VIMRUNTIME/menu.vim  fall-back for $VIM: /usr/share/vimCompilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK  -pthread -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libdrm -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -D_FORTIFY_SOURCE=2  -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       Linking: gcc   -L. -Wl,-O1,--sort-common,--as-needed,-z,relro -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,-E -Wl,-rpath,/usr/lib/perl5/core_perl/CORE  -Wl,-O1,--sort-common,--as-needed,-z,relro -L/usr/local/lib -Wl,--as-needed -o vim   -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE  -lm -lncurses -lelf -lnsl    -lacl -lattr -lgpm -ldl   -Wl,-E -Wl,-rpath,/usr/lib/perl5/core_perl/CORE -Wl,-O1,--sort-common,--as-needed,-z,relro -fstack-protector-strong -L/usr/local/lib  -L/usr/lib/perl5/core_perl/CORE -lperl -lpthread -lnsl -ldl -lm -lcrypt -lutil -lc   -L/usr/lib -ltclstub8.6 -ldl -lz -lpthread -lieee -lm     
Set colorcolumn to textwidth only when textwidth is set
colorcolumn
You're on the right track, you just need to add the same function to the BufEnter autocmd:set textwidth=0function! s:SetColorColumn()    if &textwidth == 0        setlocal colorcolumn=80    else        setlocal colorcolumn=+0    endifendfunctionaugroup colorcolumn    autocmd!    autocmd OptionSet textwidth call s:SetColorColumn()    autocmd BufEnter * call s:SetColorColumn()augroup endFrom :help BufEnter:BufEnter                        After entering a buffer.  Useful for setting                                options for a file type.  Also executed when                                starting to edit a buffer, after the                                BufReadPost autocommands.