I have a problem with my vim config…

This error occurs when opening python (.py) files:

Error detected while processing BufRead Auto commands for "*.py":
E20: Mark not set

When opening for example html (.html) or ruby (.rb) files, the error does not occur.

Here is my vim config. The plugins are all installed.

""" VUNDLE """
set nocompatible
filetype off

set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

Plugin 'VundleVim/Vundle.vim'

" plugins
Plugin 'valloric/youcompleteme'
Plugin 'scrooloose/nerdtree'
Plugin 'jistr/vim-nerdtree-tabs'
Plugin 'shawncplus/phpcomplete.vim'
Plugin 'quramy/tsuquyomi'
"Plugin 'Shougo/vimproc.vim'
Plugin 'leafgarland/typescript-vim'

call vundle#end()
filetype plugin indent on



""" CONFIG """
set history=200 "command history

set so=7 "add 7 lines when moving up/down

set hlsearch "highlight search results
set showmatch "highlight matching brackets

set ruler
set relativenumber

syntax enable
set encoding=utf8
set ffs=unix,dos,mac "unix as standard file type

set expandtab
set smarttab
set shiftwidth=4
set tabstop=4

set ai "Auto indent
set si "Smart indent
set nowrap "Wrap lines

set laststatus=2

" whitespace
set list
set listchars=tab:>-,trail:~,extends:>,precedes:<

set nobackup
set nowb
set noswapfile

" NERDTree
map <C-n> :NERDTreeToggle<CR>
"autocmd vimenter * NERDTree

" NERDTreeTabs
let NERDTreeShowHidden=1
let g:nerdtree_tabs_open_on_console_startup=1
map <Leader>n <plug>NERDTreeTabsToggle<CR>

au FileType php setl ofu=phpcomplete#CompletePHP
au FileType ruby,eruby setl ofu=rubycomplete#Complete
au FileType html,xhtml setl ofu=htmlcomplete#CompleteTags
au FileType css setl ofu=csscomplete#CompleteCSS
au FileType python setl ofu=pythoncomplete#Complete

au BufNewFile,BufRead *.py, *.php, *.rb, *.html, *.js, *.ts, *.md
    \ set tabstop=4 |
    \ set softtabstop=4 |
    \ set shiftwidth=4 |
    \ set textwidth=79 |
    \ set expandtab |
    \ set autoindent |
    \ set fileformat=unix


au BufNewFile,BufRead *.css, *.scss, *.json
    \ set tabstop=2 |
    \ set softtabstop=2 |
    \ set shiftwidth=2 |
    \ set textwidth=79 |
    \ set expandtab |
    \ set autoindent |
    \ set fileformat=unix

let g:ycm_python_binary_path="python"

if !exists("g:ycm_semantic_triggers")
  let g:ycm_semantic_triggers = {}
endif

" TypeScript plugin tsuquyomi
let g:ycm_semantic_triggers['typescript'] = ['.']
let g:tsuquyomi_import_curly_spacing = 0
let g:tsuquyomi_single_quote_import = 1
map <C-i> :TsuImport<CR>

hi Pmenu ctermbg=green

I did change the line with “BufNewFile” into different ways (1 set command, multiple set commands, with pipes, without pipes, with backslashes, without backslashes, etc.) but nothing helped.

Does anyone know what exactly the problem is?

It’s hard to notice (I had to look twice), but the problem is the spaces between the patterns in the :autocmd definition:

The syntax is

:au[tocmd] [group] {event} {pat} [nested] {cmd}

:help {pat} shows that there must not be whitespace between individual patterns.

Example

:au BufNewFile,BufRead *.py, *.php, *.rb, *.html, *.js, *.ts, *.md echomsg 'test'

:au BufRead *.py
--- Auto-Commands ---
filetypedetect  BufRead
    *.py      setf python
BufRead
    *.py      *.php, *.rb, *.html, *.js, *.ts, *.md echomsg 'test'

As you can see, Vim only recognizes the first pattern, and takes all following as (Ex) commands!

The :* command executes the contents of a register (probably rubbish), and that causes the E20 error you’ve seen (probably because there’s the ' character in the register).

Fix

Drop the whitespace. As I’ve already commented, you can also skip repeating the :set commands for each option.

:au BufNewFile,BufRead *.py,*.php,*.rb,*.html,*.js,*.ts,*.md ...