Emacs에서 열린 파일의 이름을 바꾸려면 어떻게해야합니까?
Emacs에서 열린 파일의 이름을 바꾸는 방법이 있습니까? 내가 보는 동안? 다른 이름으로 저장과 같은 것이지만 원래는 사라져야합니다.
Steve Yegge의 .emacs 에서이 기능을 사용해보십시오 .
;; 출처 : http://steve.yegge.googlepages.com/my-dot-emacs-file (defun 이름 바꾸기 파일 및 버퍼 (새 이름) "현재 버퍼와 NEW-NAME을 방문하는 파일의 이름을 모두 바꿉니다." (대화식 "새 이름 :") ((((이름 (버퍼 이름))) (파일 이름 (버퍼 파일 이름))) (파일 이름이 아닌 경우) ( "버퍼 '% s'은 (는) 파일을 방문하지 않습니다!"메시지) (만약 (get-buffer new-name) ( " '% s'버퍼가 이미 존재합니다!"메시지) (프론 (이름 바꾸기 파일 이름 new-name 1) (버퍼 이름 변경) (방문 파일 이름 new-name) (버퍼-수정 -p nil))))))))
해당 페이지를 살펴보면 "move-buffer-file"이라는 또 다른 유용한 관련 기능이 있습니다.
예, dired
모드를 사용하면 다음을 수행 할 수 있습니다.
C-x d
찢어지다RET
현재 파일의 디렉토리를 선택C-x C-j
(dired-jump
현재 파일 이름에 Dired로 표시)R
파일 이름을 바꿉니다 (또는dired-do-rename
).q
(이름이 바뀐) 파일 버퍼로 돌아가려면
이름 바꾸기는 shell과 동일 mv
하지만 열린 버퍼도 업데이트 mv
하며 파일 시스템의 파일에 대한 액세스 및 수정 시간을 변경하지 않습니다.
완전성을 위해 일부 사람들은이 페이지를 방문하여 Emacs의 "다른 이름으로 저장"기능에 대한 답변을 얻을 것이라고 생각합니다. 즉, 열린 파일의 경우 Cx Cw입니다.
내가 가장 좋아하는 것은 Magnars ( emacs rock screencasts fame)의 것입니다.
다른 대안과 달리 처음부터 이름을 입력하지 않아도됩니다. 현재 이름을 수정할 수 있습니다.
(defun rename-current-buffer-file ()
"Renames current buffer and file it is visiting."
(interactive)
(let* ((name (buffer-name))
(filename (buffer-file-name))
(basename (file-name-nondirectory filename)))
(if (not (and filename (file-exists-p filename)))
(error "Buffer '%s' is not visiting a file!" name)
(let ((new-name (read-file-name "New name: " (file-name-directory filename) basename nil basename)))
(if (get-buffer new-name)
(error "A buffer named '%s' already exists!" new-name)
(rename-file filename new-name 1)
(rename-buffer new-name)
(set-visited-file-name new-name)
(set-buffer-modified-p nil)
(message "File '%s' successfully renamed to '%s'"
name (file-name-nondirectory new-name)))))))
올바른 버전의 James Yang에게 감사합니다.
다음은 stevey에서 채택한보다 강력한 버전입니다.
;; Originally from stevey, adapted to support moving to a new directory.
(defun rename-file-and-buffer (new-name)
"Renames both current buffer and file it's visiting to NEW-NAME."
(interactive
(progn
(if (not (buffer-file-name))
(error "Buffer '%s' is not visiting a file!" (buffer-name)))
;; Disable ido auto merge since it too frequently jumps back to the original
;; file name if you pause while typing. Reenable with C-z C-z in the prompt.
(let ((ido-auto-merge-work-directories-length -1))
(list (read-file-name (format "Rename %s to: " (file-name-nondirectory
(buffer-file-name))))))))
(if (equal new-name "")
(error "Aborted rename"))
(setq new-name (if (file-directory-p new-name)
(expand-file-name (file-name-nondirectory
(buffer-file-name))
new-name)
(expand-file-name new-name)))
;; Only rename if the file was saved before. Update the
;; buffer name and visited file in all cases.
(if (file-exists-p (buffer-file-name))
(rename-file (buffer-file-name) new-name 1))
(let ((was-modified (buffer-modified-p)))
;; This also renames the buffer, and works with uniquify
(set-visited-file-name new-name)
(if was-modified
(save-buffer)
;; Clear buffer-modified flag caused by set-visited-file-name
(set-buffer-modified-p nil)))
(setq default-directory (file-name-directory new-name))
(message "Renamed to %s." new-name))
VC를 인식하는 또 다른 버전이 있습니다.
(defun rename-file-and-buffer ()
"Rename the current buffer and file it is visiting."
(interactive)
(let ((filename (buffer-file-name)))
(if (not (and filename (file-exists-p filename)))
(message "Buffer is not visiting a file!")
(let ((new-name (read-file-name "New name: " filename)))
(cond
((vc-backend filename) (vc-rename-file filename new-name))
(t
(rename-file filename new-name t)
(set-visited-file-name new-name t t)))))))
Mx 명령을 누르고 vc-rename-file 유형보다 훨씬 쉬운 방법이 있습니다. 그런 다음 디렉토리에서 현재 파일을 선택하고 새 이름을 선택하면됩니다. 변경된 파일이있는 버프가 새로 고쳐집니다.
출처 : https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Delete_002fRename.html
magnars 버전을 기반으로 다음과 같이 수정하여 INIT 파일 이름 부분을 수정했습니다.
(defun rename-current-buffer-file ()
"Renames current buffer and file it is visiting."
(interactive)
(let* ((name (buffer-name))
(filename (buffer-file-name))
(basename (file-name-nondirectory filename)))
(if (not (and filename (file-exists-p filename)))
(error "Buffer '%s' is not visiting a file!" name)
(let ((new-name (read-file-name "New name: " (file-name-directory filename) basename nil basename)))
(if (get-buffer new-name)
(error "A buffer named '%s' already exists!" new-name)
(rename-file filename new-name 1)
(rename-buffer new-name)
(set-visited-file-name new-name)
(set-buffer-modified-p nil)
(message "File '%s' successfully renamed to '%s'"
name (file-name-nondirectory new-name)))))))
Spacemacs 를 사용하는 경우 rename-current-buffer-file
기본적으로에 바인딩 된 (magnars 기반) 구현이 제공 되므로이 동작은 무료 SPC-f-R
입니다.
복사하여 얻을 수 있습니다. 파일에서 shift + c를 누르면 emacs는 파일 이름을 포함한 경로의 이름을 표시하도록 요청하므로 새 이름을 제공하고 입력하십시오. 물론 이전 이름을 삭제해야합니다.
참고 URL : https://stackoverflow.com/questions/384284/how-do-i-rename-an-open-file-in-emacs
'Programing' 카테고리의 다른 글
컨텍스트 또는 활동 외부의 getString (0) | 2020.04.15 |
---|---|
Vim의 자동 완성 (0) | 2020.04.15 |
jQuery를 사용하여 알파벳순으로 목록을 정렬하려면 어떻게해야합니까? (0) | 2020.04.15 |
명령 줄 매개 변수를 구문 분석하는 가장 좋은 방법은 무엇입니까? (0) | 2020.04.15 |
Java Server Faces 2.0의 주요 단점은 무엇입니까? (0) | 2020.04.15 |