Insertar un solo carácter en Vim?

25

En Vim (7.2), hay un comando de modo normal rpara reemplazar un solo personaje con otro. Por ejemplo, escribir rXreemplazará el carácter debajo del cursor con Xy luego lo regresará al modo normal.

¿Existe un comando en modo normal para insertar un solo carácter y luego volver al modo normal?

John Dibling
fuente
1
Posible duplicado entre sitios: stackoverflow.com/questions/1557893/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Consulte vim.wikia.com/wiki/Insert_a_single_character para obtener una solución integral.
Maxim Suslov

Respuestas:

6

MelBurslan tiene razón en que esta característica no existe de forma nativa, pero crear un comando definido por el usuario no es realmente la forma de crearlo. Jugué unos minutos y se me ocurrió esto:

:nmap <silent> ,s "=nr2char(getchar())<cr>P

Que utiliza algunos trucos de Vim que implican "poner" texto de un registro, en este caso el registro de "expresión". La expresión que se está conectando al registro es " nr2char(getchar())", que devolverá una cadena de caracteres única.

La razón por la que construí el mapeo de esta manera es porque obtener la entrada del usuario "a mitad de camino" es complicado y puede comportarse de manera impredecible; incluso esta asignación colocará el cursor en el área de estado mientras espera que el usuario escriba un carácter.

Heptita
fuente
8

Gracias a Johnny por darnos esta excelente respuesta en los comentarios a continuación:

":nmap <C-i> i_<Esc>r"

Eso asigna Control + i para insertar un solo carácter, y lo hace de manera muy concisa.

En su archivo vimrc, esto se verá así:

nnoremap <C-i> i_<Esc>r

Cambié mi mapeo para usar el espacio, y puedes cambiar el tuyo a tu (s) clave (s) preferida (s):

nnoremap <Space> i_<Esc>r
Matt C
fuente
1
Esta es la respuesta más concisa y simple.
Dylanthepiguy
4

Hasta donde yo sé, no existe tal función en ninguna encarnación ampliamente distribuida de vi editor pero, vim tiene una facilidad para crear comandos personalizados. Se ha discutido anteriormente aquí: en este hilo

Es posible que pueda crear su comando personalizado haciendo lo que desea hacer.

MelBurslan
fuente
3
Aquí está el comando para asignar Ctrl-I para insertar un solo carácter: ": nmap <Ci> i_ <esc> r"
Johnny
2

Una manera simple de hacer esto es usar los comandos Cortar xy Poner p. Digamos que ese *es el carácter que desea insertar. Insértalo usando i * Esc. Entonces golpear x. Eso cortará al personaje. Ahora, puedes golpear ppara poner el personaje único. Si es necesario insertar caracteres que 300 veces, puede escribir: 300p.

Steve Bragg
fuente