나는 /var/~/
폴더가 있습니다. 구성에서 .emacs
이 폴더에서 일부 파일을로드하고 싶습니다. (load-file "/var/~/foobar.el")
을 사용하려고 시도하지만 emacs는 File error: Cannot open load file, ~/foobar.el
을 경고합니다. 또한이 폴더 아래의 파일을 c-x c-f
과 함께 열 수도 없습니다. 미니 버퍼에서 경로가 자동으로 내 집으로 리디렉션됩니다. 어떻게 해당 폴더에 파일을로드 할 수 있습니까?틸드 (~)라는 폴더가있는 경로는 이맥스의 load-file로 다시 지정할 수 없습니다.
답변
디렉토리의 이름을 바꿔야합니다.
load-file
은 substitute-in-file-name
을 통해 주어진 파일 이름을 전달하는 load
주위의 간단한 래퍼입니다. substitute-in-file-name
(중점 광산)에서 :
FILENAME에서 언급 한 대체 환경 변수. `$ FOO '여기서 FOO는 환경 변수 이름이고 을 해당 변수의 값으로 대체하는 것을 의미합니다. 변수 이름은 문자, 숫자 또는 밑줄이 아닌 문자로 끝나는 이어야합니다. 그렇지 않으면 전체 변수 이름을 중괄호로 묶으십시오.
`/ ~ '가 나타나면 그'/ '를 통해 모든 파일 이름이 삭제됩니다.`// '가 나타나면, 그`/'중 첫 번째를 포함하여 모든 것이 버려집니다. 즉
는 substitute-in-file-name
는 ~/foo.el
에 /var/~/foo.el
선회, /~
전에 모든 것을 버린다.
나는이 동작에서 어떤 이유인지 완전히 볼 수는 없지만 그게 무엇인지 알기 때문에 (쉽게) 해결할 수 없으므로 이름 바꾸기가이 딜레마에서 벗어나는 최선의 방법입니다.
어쨌든 합리적인 일입니다. 디렉토리 이름으로 ~
을 사용하는 것은 일반적으로 유닉스 시스템에서만 바람직하지 않습니다. 이맥스 만이 아닙니다.
답장을 보내 주셔서 감사합니다. 이름 바꾸기가 가장 좋은 해결책 일 수 있습니다. –
그 이유는 바로 가기가'~'또는'/'(루트 디렉토리)로 돌아 가기위한 것이라고 생각합니다. 그렇지 않으면 임의의 깊은 디렉토리에서 root로 backspace하고,'/ home/username /'로 돌아가서'~'로 돌아갈 수있는 유일한 방법이다. –
lunaryorn이 문제를 잘 설명했으며 파일 경로에 ~
을 사용하지 않는 것이 가장 좋은 해결책이라고 자신의 제안에 동의합니다. 그러나 어떤 이유에서든이 경로의 이름을 바꿀 수없는 경우 substitute-in-file-name
으로 load
으로 처리하고 here과 같은 상대 파일 경로를 사용할 수 있다고 생각합니다.
기본적으로 load-path
변수에 nil
을 추가 한 다음 default-directory
변수를 문제가되는 경로로 설정하고 마지막으로 상대 이름을 사용하여 파일을로드해야합니다. 예컨대 : 당신이 의심되는 경우 파일 이름이 존재 (로드 할) 수 있다는
; adding nil causes load to also search your 'default-directory'
(setq load-path (append '(nil) load-path))
(setq default-directory "/tmp/~/")
(load "foobar.el")
참고 다른 곳에서 load-path
당신은 당신이 먼저 load-path
에 원하는 파일을 확인해야합니다.
How programs do loading을 참조하십시오.
고맙습니다. –
그 디렉토리 이름은'~'입니까? 그렇다면'''이 다양한 문맥에서 홈 디렉토리로 확장되는 경향이 있기 때문에 그 생각은 정확하지 않습니다. –
Emacs는 옆으로 농담을합니다. 이것은 프로그램 사용에 관한 것이지, 프로그램을 만드는 것이 아닙니다. – MSalters
Paul R이 맞다.'~'폴더의 이름을 다른 것으로 바꾸는 것이 일반적이다. 그 문자는 일반적으로 이맥스가 홈 디렉토리의 경로로 인식하기 때문이다. – lawlist