2024-10-20 16:45

Bash Tips

Faire echap, et hop, on peut bouger à la Vim :

set -o vi

Tab fonctionne sur /home/user ou /home/User, case insensitive :

bind 'set completion-ignore-case on'

Sous vim normale mode, on garde les vieille habitude bash :

bind '"\C-a": beginning-of-line' # ctrl-a in insert mode
bind '"\C-e": end-of-line' # ctrl-e in insert mode

Quand on fait haut ou bas, recherche uniquement les meme premier caracteres. Plus fort que ctrl-r

bind '"\e[A": history-search-backward' # search only previous string on key up
bind '"\e[B": history-search-forward' # search only next string on key down

Afin que ctrl- fonctionne :

stty werase undef
bind '\C-w:backward-kill-word'
# found on http://unix.stackexchange.com/questions/27927/is-it-possible-to-configure-ctrl-w-delete-word

Doom Emacs

Thanks hlissner for bringing https://github.com/hlissner/doom-emacs

Completion in buffer

Doom comes with company

The need

I want to bring back C-n in emacs that looks like vim

Setup package

(use-package! company
  :config
  ;; disable auto popup after x seconds
  (setq company-idle-delay nil
        ;; allow code completion inside comments and string (took 5hours to figure out...)
        company-dabbrev-code-everywhere t)
  (define-key company-active-map (kbd "<tab>") #'company-complete-common)
  ;; you can use space to complete word
  (define-key company-active-map (kbd "SPC") #'company-complete-selection))

Setup C-n

(map! :i  "C-n" #'+company/dabbrev
      :i  "C-p" #'+company/dabbrev-code-previous)

I want a space after pressing… space

;; Add a space
(defun company-after-completion-hook (&rest _ignored)
  (just-one-space))

(add-hook! 'company-completion-finished-hook #'company-after-completion-hook)

Enjoy

2020-01-03 14:36

Emacs

Nouvelle année. Nouveau défi : Après 7 ans de Vim, je regarde ce que propose Emacs.

Liste en vrac des trouvailles.

Comment implementer vim-commentary

Ma premiere commande ajouté/créé :

(evil-define-key 'normal 'global (kbd "gcc") 'comment-line)

Et ca fonctionne !!

Le must, pour trouver ‘comment-line j’ai juste fait M-x comment puis tab et j’ai vu les possibilité.

Bon, finalement, j’ai installé le package evil-commentary car il gere vraiment le mouvement.

how to install :

M-x package-install RET evil-commentary

;; then, inside ~/.emacs.d/init.el
(evil-commentary-mode)

Comment reproduire l’excellent vim-skip dans emacs ?

J’ai toujours utilisé vim-skip qui permet d’avancer moitié par moitié en appuyant sur s.

Je ne trouve pas d’equivallent evil-skip

elisp me semble très bien foutu.

15 minutes apres :

(defun middle-of-line-forward ()
  "Put cursor at the middle of the rest of the line. try to mimic vim-skip s"
  (interactive)
  (goto-char (/ (+ (point) (point-at-eol)) 2)))

(defun middle-of-line-backward ()
  "Put cursor at the middle of the beginning of the line. try to mimic vim-skip S"
  (interactive)
  (goto-char (/ (+ (point) (point-at-bol)) 2)))

(define-key evil-normal-state-map (kbd "s") 'middle-of-line-forward)
(define-key evil-normal-state-map (kbd "S") 'middle-of-line-backward)

ET CA MARCHE !

DU PREMIER COUP !

Mind blown.

Afficher / voir les fonctions / trouver la source d inspiration :

M-x RET find-function RET what-line

Et soudain, vous voyez :

(defun what-line ()
  "Print the current buffer line number and narrowed line number of point."
  (interactive)
  (let ((start (point-min))
	(n (line-number-at-pos)))
    (if (= start 1)
	(message "Line %d" n)
      (save-excursion
	(save-restriction
	  (widen)
	  (message "line %d (narrowed line %d)"
		   (+ n (line-number-at-pos start) -1) n))))))

Avoir le meme comportement que …

Vim:

set scrolloff=3

Emacs :

(custom-set-variables
 '(hscroll-margin 15)
 '(hscroll-step 1)
 '(scroll-conservatively 10000)
 '(scroll-margin 3)
 '(scroll-step 1))

Vim :

set nowrapscan

Emacs :

(custom-set-variables
 '(evil-search-wrap nil))

Remember last location in file

vim :

augroup lastlocation
  autocmd!
  autocmd bufreadpost * if line("'\"") > 0 && line("'\"") <= line("$") | execute "normal! g'\"" | endif
augroup end

emacs :

(custom-set-variables
 '(save-place-mode t))

Activate mouse in terminal

vim :

if has('mouse')
  set mouse=a
endif

emacs :

(custom-set-variables
 '(xterm-mouse-mode t))

Tout semble exister, tout semble clair.

En écrivant ce post, j’ai vu des trailing whitespace.

Pour les effacer

Sous vim : :%s/\s\+$//e

Sous emacs : M-x delete-trailing-whitespace (bien sur, en faisant tab tout le long)

Liens

Install

On va au plus simple, on oublie leiningen, boot au java -cp ….

On install les clojure tools https://clojure.org/guides/getting_started

curl -O https://download.clojure.org/install/linux-install-1.10.0.442.sh
chmod +x linux-install-1.10.0.442.sh
sudo ./linux-install-1.10.0.442.sh

(Répeter l’operation avec les nouveaux liens pour une upgrade)

Tout marche ?

clj --help

Usage: clojure [dep-opt*] [init-opt*] [main-opt] [arg*]
       clj     [dep-opt*] [init-opt*] [main-opt] [arg*]

Le fichier

;cat hello.clj

(ns simplest.clojure.code
  (:gen-class))

(defn hello-world []
  (println "Hello World"))

(hello-world)

Run

clj hello.clj
Hello World

Merci au revoir….

Better

Ça fonctionne. Mais on peut faire mieux.

Je déteste ces fichiers de code qui se lance juste parce qu’on les ‘charges’. Je veux que tout soit fonction.

;cat hello.clj

(ns simplest.clojure.code
  (:gen-class))

(defn hello-world []
  (println "Hello World"))

(defn -main [& args]
  (hello-world))

Il ne se passe rien :

clj hello.clj

Normal, rien n’oblige à lancer la fonction -main. Il faut l’appeler de cette facon :

clj --init hello.clj --main simplest.clojure.code
Hello World
  • -i: l’input
  • –main “Call the -main function from namespace” Donc il faut lui passer le namespace

C’est beaucoup mieux. Maiiiiiiiis contraignant.

On peut définir le tout avec un project.clj, mais la on sort du cadre du ‘simplest clojure’.

2017-10-05 10:54