I am confused between the two events BufRead and BufEnter. What is the difference between them?
Some example scenarios where I would choose one
BufRead is triggered after the buffer has been populated with the content of a file.
BufEnter is triggered after you enter a buffer for editing.
You may use BufNew, BufRead or BufAdd if you want to do something upon the creation of the buffer: setting some global variable, populating a buffer list of your own for use in a script.
You may use BufEnter when you want to set specific options depending on the filetype or whatever.