Vim과 Windows가 Program Files 디렉토리에서 동일한 이름을 가진 두 개의 다른 파일을 볼 수있는 방법


6

vim, Cygwin 도구 및 Windows7 간의 이상한 상호 작용을보고 있습니다. 나는 그것이 버그라고 생각하지 않지만, 동시에 내가보고있는 것을 설명하는 방법을 모른다.

Vim (Cygwin vim이 아닌 vim.org에서)을 설치했습니다 :

"C:\Program Files (x86)\Vim".

나는이 디렉토리로 cd하고 vim 자체를 사용하여 _vimrc 파일을 편집했다.

vim _vimrc

몇 가지 설정을 추가하고 파일을 작성한 다음 종료했습니다.

그런 다음 파일을 다른 디렉토리에 복사하여 변경 사항 백업을 작성했습니다.

copy _vimrc c:\tmp

그때 내가 문제를 발견했습니다. 파일 사본에 변경 사항 이 없습니다 . 많은 조사가 뒤따 랐습니다. 결과를 요약하겠습니다.

"C : \ Program Files (x86) \ Vim"내에서 다음 중 하나를 사용하여 파일을 검사하면 변경 내용이 표시됩니다.

vim, cat, less

(Cygwin 버전은 cat 이하입니다.)

그러나 다음 중 하나를 사용하여 파일을 검사하면 변경 사항이 표시되지 않습니다.

notepad, type, more

명령 유형 등은 표준 Windows 셸 명령입니다.

당신에게 맛을주기 위해 :

c:\Program Files (x86)\Vim>ls -l _vimrc
-rwx------+ 1 carlx Domain Users 936 Dec 23 21:15 _vimrc

c:\Program Files (x86)\Vim>dir _vimrc
 Volume in drive C is OSDisk
 Volume Serial Number is 6C86-85EB

 Directory of c:\Program Files (x86)\Vim

06/28/2011  02:09 PM               901 _vimrc
               1 File(s)            901 bytes
               0 Dir(s)  95,964,721,152 bytes free

Cygwin ls 명령은 Windows dir 명령과 다른 파일 (날짜와 크기가 다름)을 표시합니다.

아마도 파일 이름의 케이스에 문제가 있다고 생각했지만 이러한 명령 중 하나에 _VIMRC와 _vimrc를 지정해도 아무런 차이가 없습니다.

아무도 내가 여기서보고있는 것을 설명 할 수 있습니까?


7
이것은 아마도 파일 시스템 가상화 일 것입니다.

7
가상화 문제인 경우 c : \ users \ <youraccoutname> \ appdata \ local \ virtualstore \ program files (86)에서 편집 된 파일을 찾을 수 있습니다 (86)
kreemoweet

와우. 당신은 맞습니다, 크리 모 위트. 지정한 디렉토리를 보았고 편집 된 파일이 있습니다. 저에게는 정말 이상합니다. 이 Windows 파일 시스템 가상화에 대한 정보를 어디서 더 알고 있습니까? 감사!
칼 파커

3
@kreemoweet-해당 의견을 답변으로 게시해야합니다.
Nifle

답변:


3

Raymond Chen과 @kreemoweet가 위에서 지적했듯이 이는 파일 시스템 가상화 로 인해 발생합니다 . 이 기능을 끄려면 로컬 그룹 정책 편집기를 사용할 수 있습니다 gpedit.msc. start gpedit.msc명령 프롬프트를 입력 하고 컴퓨터 구성> Windows 설정> 보안 설정> 로컬 정책> 보안 옵션으로 이동하십시오. 오른쪽 창의 맨 아래로 스크롤하여을 두 번 클릭하십시오 User Account Control: Virtualize file and registry write failures to per-user locations. 설정을 사용에서 사용 안함으로 변경하십시오.


2
파일 시스템 가상화는 호환성 척도이므로이를 끄면 일부 레거시 응용 프로그램이 손상 될 수 있습니다.
Harry Johnston

0

Windows에서 일반적으로 사용되는 NTFS 파일 시스템은 POSIX 준수를위한 Windows의 노력의 일부로 경우에만 다른 이름이 동일한 여러 파일을 지원합니다. 자세한 내용은 http://support.microsoft.com/kb/100625 에서 볼 수 있습니다 . 그러나 모든 Windows (및 아마도 대부분의 API)와 Windows 제공 응용 프로그램이이를 방지합니다.

아마 당신은 동시에 _vimrc그리고 _VIMRC기존의 것을 가지고있을 것입니다. 그리고 표준 API는 당신에게 그것들 중 하나만 보여줄 것입니다 (어떤 로직이 어떤 로직을 선택하는지에 대해서는 확실하지 않습니다). vim은 관찰중인 결과를 얻기 위해 비표준 API를 사용하거나 비표준 옵션으로 호출해야한다고 말하려고했지만 vim만으로는 이것을 재현 할 수없는 것 같습니다. 나는이 Cygwin에서의 버그 고려할 것, 정력, 복사, 실제로이 상황에서 이어진이었다 무엇 이건 - 좋은 지적을 제공합니다 - 당신이 실제로 사용 했 copy(Cygwin에서에 존재하지 않는) 또는 cp?

http://www.cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-casesensitive 도 확인 하십시오 . Cygwin으로 제한되지 않는 레지스트리 설정이 여기에 있습니다.


Windows 복사 명령은 처음에 파일을 복사하는 데 사용한 것으로서 변경 사항이없는 "복사"가 발생했습니다. Cygwin의 cp 명령을 사용하면 파일 변경 사항 과 함께 다른 디렉토리 에 복사 할 수 있습니다.

@CarlParker-방금 답변에 추가 한 Cygwin 설명서의 링크를 확인하십시오.
ziesemer

여기에 모든 다운 보트와 함께 무엇이 있습니까?
ziesemer

다운 투표가 무엇인지 모르겠습니다. 귀하의 답변이 미스터리에 대한 답변이 아니었지만 여전히 도움이되었으며 답변 해 주셔서 감사합니다. (그리고 위의 @Paul Betts와 유사합니다.)
Carl Parker

0

사용자가 실행하면 어떻게됩니까 C:\Windows\SysWOW64\cmd.exedir? WOW64 File Redirected되고 있습니다.


감사. c : \ windows \ SysWow64 \ cmd.exe에서 dir과 ls는 여전히 파일의 다른 날짜와 크기를보고합니다.
Carl Parker

Program Files 폴더에는 WOW64 리디렉션이 적용되지 않습니다.
Harry Johnston

@PaulBetts : 참조하십시오. 파일 리디렉션에 대한이 MSDN 문서는 system32 폴더 만 언급합니다. msdn.microsoft.com/en-us/library/aa384187%28v=vs.85%29
Harry Johnston

게다가, 나는 그것을 시도했다. 32 비트 cmd.exe를 사용하여 c : \ windows \ system32를보고 예상대로 c : \ windows \ syswow64의 내용을 확인했습니다. 그러나 c : \ Program Files를 보면 c : \ Program Files (x86)의 내용이 표시 되지 않습니다 .
Harry Johnston

@HarryJohnston 실제로 msdn.microsoft.com/en-us/library/bb756960.aspx 의 MSDN Library 페이지는 모든 폴더에 대한 쓰기가 파일 시스템 가상화를 통해 리디렉션 될 수 있음을 암시하는 것으로 보입니다.
Fran

0

Raymond Chen과 @kreemoweet이 그들의 의견에서 추측 한 것처럼 이것은 파일 시스템 가상화 문제였으며 파일을 다음에서 발견했습니다.

c:\users\<youraccoutname>\appdata\local\virtualstore\program files(86)

그게 답이었습니다. 고마워요

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.