2014-09-30 6 views
2

나는 /var/~/ 폴더가 있습니다. 구성에서 .emacs이 폴더에서 일부 파일을로드하고 싶습니다. (load-file "/var/~/foobar.el")을 사용하려고 시도하지만 emacs는 File error: Cannot open load file, ~/foobar.el을 경고합니다. 또한이 폴더 아래의 파일을 c-x c-f과 함께 열 수도 없습니다. 미니 버퍼에서 경로가 자동으로 내 집으로 리디렉션됩니다. 어떻게 해당 폴더에 파일을로드 할 수 있습니까?틸드 (~)라는 폴더가있는 경로는 이맥스의 load-file로 다시 지정할 수 없습니다.

+2

그 디렉토리 이름은'~'입니까? 그렇다면'''이 다양한 문맥에서 홈 디렉토리로 확장되는 경향이 있기 때문에 그 생각은 정확하지 않습니다. –

+0

Emacs는 옆으로 농담을합니다. 이것은 프로그램 사용에 관한 것이지, 프로그램을 만드는 것이 아닙니다. – MSalters

+0

Paul R이 맞다.'~'폴더의 이름을 다른 것으로 바꾸는 것이 일반적이다. 그 문자는 일반적으로 이맥스가 홈 디렉토리의 경로로 인식하기 때문이다. – lawlist

답변

4

디렉토리의 이름을 바꿔야합니다.

load-filesubstitute-in-file-name을 통해 주어진 파일 이름을 전달하는 load 주위의 간단한 래퍼입니다. substitute-in-file-name (중점 광산)에서 :

FILENAME에서 언급 한 대체 환경 변수. `$ FOO '여기서 FOO는 환경 변수 이름이고 을 해당 변수의 값으로 대체하는 것을 의미합니다. 변수 이름은 문자, 숫자 또는 밑줄이 아닌 문자로 끝나는 이어야합니다. 그렇지 않으면 전체 변수 이름을 중괄호로 묶으십시오.

`/ ~ '가 나타나면 그'/ '를 통해 모든 파일 이름이 삭제됩니다.`// '가 나타나면, 그`/'중 첫 번째를 포함하여 모든 것이 버려집니다. 즉

substitute-in-file-name~/foo.el/var/~/foo.el 선회, /~ 전에 모든 것을 버린다.

나는이 동작에서 어떤 이유인지 완전히 볼 수는 없지만 그게 무엇인지 알기 때문에 (쉽게) 해결할 수 없으므로 이름 바꾸기가이 딜레마에서 벗어나는 최선의 방법입니다.

어쨌든 합리적인 일입니다. 디렉토리 이름으로 ~을 사용하는 것은 일반적으로 유닉스 시스템에서만 바람직하지 않습니다. 이맥스 만이 아닙니다.

+0

답장을 보내 주셔서 감사합니다. 이름 바꾸기가 가장 좋은 해결책 일 수 있습니다. –

+1

그 이유는 바로 가기가'~'또는'/'(루트 디렉토리)로 돌아 가기위한 것이라고 생각합니다. 그렇지 않으면 임의의 깊은 디렉토리에서 root로 backspace하고,'/ home/username /'로 돌아가서'~'로 돌아갈 수있는 유일한 방법이다. –

1

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을 참조하십시오.

+0

고맙습니다. –