Hide all posts by an author

A filter on pre_get_posts should do it.

function hide_author_wpse_138491($qry) {
  $exc = 123;
  if (
    !is_admin()
    && !is_singular()
  ) {
    $qry->set('author','-'.$exc);
  }
}
add_action('pre_get_posts','hide_author_wpse_138491');

This should exclude results from the author with ID = 123 on all front end pages except for “single” pages, which sound like what you are aiming for– ie, to “completely hide all posts by author X from the search, category, taxonomy pages etc.”