How can I have h and l move the viewport only by one column when they go beyond the left and right borders when
nowrap is active?
Simply do this:
'sidescroll' controls "the minimal number of columns to scroll horizontally". So with a value of 1
l will shift the screen one column at a time.
Side note: the commands
zl will shift the screen a column at a time but they don't move the cursor. If, for some reason, you couldn't or didn't want to change
'sidescroll' you could do something like
nnoremap zh zh<left> to achieve the same effect.