blink.cmp uses the `enter` preset with `completion.list.selection.preselect = false`, so an item is taken only once selected with `<Down>`/`<C-n>` and `<CR>` otherwise inserts a newline. `<C-y>` stays bound as vim's own confirm key. `<Esc>` and `<C-e>` both run `cancel` rather than the preset's `hide`: hiding leaves the auto_insert preview in the buffer without the `additionalTextEdits` and snippet expansion a real accept applies, and builtin ins-completion `<C-e>` likewise restores the typed text. `shiftwidth`/`tabstop` are 4, matching PHP's PSR-12. PHP's `indentkeys` carry `*<Return>`, which reindents the just-finished line on every newline; at width 2 that silently re-indented 4-space files. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015D4NsszUG7hy9ghKZ4nfhm