global-set-key "C-j" 不起作用了

(global-set-key (kbd "C-j") 'avy-goto-char-in-line)
(global-set-key (kbd "C-k") 'avy-goto-char-in-line)

第二行起作用,第一行无效,用的是Emacs26 mac port。

eval-buffer后,C-j绑定的仍然是eval-print-last-sexp,是因为global-set-key优先级不够高吗?

C-h k C-j 可以看到生效的按键绑定在哪个 keymap 中,在第一行 found in xxx-map

应该是由于优先级导致的, global map 是最后兜底的 map 。

你的判断没错。如果要解决这个问题,可以试试这两种办法

  1. 取消 Major Mode 对 C-j 的绑定

    (define-key lisp-interaction-mode-map (kbd "C-j") nil)
    
  2. 提高 C-j 的优先级

    ;; 如果有装 bind-key.el;
    ;; 这个 C-j 的优先级成为最高,比 Minor Mode 还高
    (bind-key* "C-j" #'emacs-version)

最简单的办法是具体的优先级不管,直接看found in xx-map,然后对那个map define-key