¿Cómo puedo obtener emacs para cambiar de pestaña para mover el texto seleccionado hacia la izquierda en 4 espacios?Emacs Shift-Tab para desplazar hacia la izquierda el bloque
Respuesta
Esto elimina 4 espacios del frente de la línea actual (suponiendo que existan espacios).
(global-set-key (kbd "<S-tab>") 'un-indent-by-removing-4-spaces)
(defun un-indent-by-removing-4-spaces()
"remove 4 spaces from beginning of of line"
(interactive)
(save-excursion
(save-match-data
(beginning-of-line)
;; get rid of tabs at beginning of line
(when (looking-at "^\\s-+")
(untabify (match-beginning 0) (match-end 0)))
(when (looking-at "^ ")
(replace-match "")))))
Si la variable tab-width
pasa a ser 4 (y eso es lo que desea "deshacer"), entonces se puede sustituir el (looking-at "^ ")
con algo más general como (concat "^" (make-string tab-width ?\))
.
Además, el código convertirá las pestañas en el frente de la línea a espacios usando untabify.
Para hacer eso, uso el comando indent-rigidly
, vinculado a C-x TAB
. Dale el argumento -4 para mover la región seleccionada hacia la izquierda por cuatro espacios: C-u -4 C-x TAB
.
http://www.gnu.org/s/emacs/manual/html_node/elisp/Region-Indent.html
Por la misma entrada manual, es posible que prefiera 'indent-code-rigidly 'como deja solo comentarios y cadenas de varias líneas – toolbear
hice algunas funciones para la tabulación de una región a lo largo de cuatro espacios hacia la izquierda o la derecha dependiendo de si pestaña o shift + tab utiliza:
(defun indent-region-custom(numSpaces)
(progn
; default to start and end of current line
(setq regionStart (line-beginning-position))
(setq regionEnd (line-end-position))
; if there's a selection, use that instead of the current line
(when (use-region-p)
(setq regionStart (region-beginning))
(setq regionEnd (region-end))
)
(save-excursion ; restore the position afterwards
(goto-char regionStart) ; go to the start of region
(setq start (line-beginning-position)) ; save the start of the line
(goto-char regionEnd) ; go to the end of region
(setq end (line-end-position)) ; save the end of the line
(indent-rigidly start end numSpaces) ; indent between start and end
(setq deactivate-mark nil) ; restore the selected region
)
)
)
(defun untab-region (N)
(interactive "p")
(indent-region-custom -4)
)
(defun tab-region (N)
(interactive "p")
(if (active-minibuffer-window)
(minibuffer-complete) ; tab is pressed in minibuffer window -> do completion
; else
(if (string= (buffer-name) "*shell*")
(comint-dynamic-complete) ; in a shell, use tab completion
; else
(if (use-region-p) ; tab is pressed is any other buffer -> execute with space insertion
(indent-region-custom 4) ; region was selected, call indent-region
(insert " ") ; else insert four spaces as expected
)))
)
(global-set-key (kbd "<backtab>") 'untab-region)
(global-set-key (kbd "<tab>") 'tab-region)
Editar: Código de Agregado Maven para compruebe si está en el minibúfer, así como para completar la tabulación en almacenamientos intermedios específicos (shell, por ejemplo).
Bueno, la respuesta aceptada solo funcionaba para 1 línea, no para las regiones –
Perfecto. Funciona para regiones y líneas. Replica otras funcionalidades comunes del editor. – mythicalcoder
He mejorado la respuesta de Stanley Bak. Para mí, este enlace de clave global estaba arruinando la finalización del minibúfer.
Así que he incluido un estuche para minibúfer también.
Editar: Renombrar indent-region
->indent-region-custom
.
indent-region
está en conflicto con el comando existente y da error para sangría al guardar (enganchar antes de guardar) y algunas otras combinaciones de teclas.
(defun indent-region-custom(numSpaces)
(progn
;; default to start and end of current line
(setq regionStart (line-beginning-position))
(setq regionEnd (line-end-position))
;; if there's a selection, use that instead of the current line
(when (use-region-p)
(setq regionStart (region-beginning))
(setq regionEnd (region-end))
)
(save-excursion ; restore the position afterwards
(goto-char regionStart) ; go to the start of region
(setq start (line-beginning-position)) ; save the start of the line
(goto-char regionEnd) ; go to the end of region
(setq end (line-end-position)) ; save the end of the line
(indent-rigidly start end numSpaces) ; indent between start and end
(setq deactivate-mark nil) ; restore the selected region
)
)
)
(defun untab-region (N)
(interactive "p")
(indent-region-custom -4)
)
(defun tab-region (N)
(interactive "p")
(if (active-minibuffer-window)
(minibuffer-complete) ; tab is pressed in minibuffer window -> do completion
(if (use-region-p) ; tab is pressed is any other buffer -> execute with space insertion
(indent-region-custom 4) ; region was selected, call indent-region-custom
(insert " ") ; else insert four spaces as expected
)
)
)
(global-set-key (kbd "<backtab>") 'untab-region)
(global-set-key (kbd "<tab>") 'tab-region)
- 1. ¿Hay alguna manera de desplazar las líneas resaltadas hacia la izquierda o hacia la derecha en el Bloc de notas ++
- 2. ¿Cómo puedo desplazar las imágenes de página en archivos PDF más hacia la izquierda o hacia la derecha?
- 3. jQuery: deslice hacia la izquierda y deslice hacia la derecha
- 4. Desplazar una animación jQuery hacia atrás y hacia adelante
- 5. emacs desplazarse otra ventana hacia arriba
- 6. Paginación precisa con uniones hacia la izquierda
- 7. ¿Cómo detectar deslizar hacia la izquierda/derecha en el iPhone?
- 8. Uso de javascript para desplazar iframe hacia arriba y hacia abajo
- 9. Alinee el diseño de dos botones hacia la izquierda y hacia la derecha en Android
- 10. ¿Puedo usar jQuery para desplazar fácilmente los elementos li hacia arriba o hacia abajo?
- 11. eliminar línea hacia atrás (Emacs)
- 12. Agregue deslizar hacia la izquierda/derecha a la página web, pero use la función predeterminada deslizar hacia arriba/abajo
- 13. , ¿qué evento se usa para deslizar el dedo hacia la izquierda y hacia la derecha en Android?
- 14. Gire la imagen hacia la derecha o hacia la izquierda dentro de un div usando javascript
- 15. Cómo cambiar la imagen de UIImageView deslizando hacia la derecha o hacia la izquierda desde UIViewController
- 16. cómo mover un botón hacia la izquierda o hacia la derecha programáticamente en android
- 17. Cómo prevenir el método de enfoque() de desplazar la página hacia la parte superior
- 18. iOS: deslizar hacia la izquierda/derecha entre las pestañas posibles?
- 19. MSysGit Bash: ¿cómo habilitar Ctrl + flechas hacia la izquierda/derecha?
- 20. Cómo desplazar un panel manualmente?
- 21. Bloque de ecuaciones de la izquierda de ecuaciones
- 22. ¿Cómo configurar Emacs gdb para que muestre el comando reciente en la flecha hacia arriba?
- 23. ¿Cómo se mueve el puntero hacia arriba o hacia abajo de varias líneas con Emacs?
- 24. Acceso directo para mover un bloque de código en 4 sangrías en IntelliJ IDEA
- 25. cómo desplazar imágenes en QGraphicsView
- 26. Android - El texto se empuja hacia la izquierda en un Spinner
- 27. ¿Cómo puedo hacer que este texto se coloque todo el camino hacia la izquierda?
- 28. Cómo desplazar horizontalmente una página web?
- 29. Deslice hacia la izquierda o derecha en cualquier lugar en una UITableViewCell para eliminar la celda sin eliminar el botón?
- 30. intente la indentación del bloque catch en Emacs
¡Guau! Pero usaría WHEN en lugar de IF, ya que no hay ninguna cláusula else. – Ken
para mí, no funciona con una región seleccionada. Solo con la primera línea: -/ – Ismael
Para mí, no funciona en absoluto. :( –