Ivy desabilitar a conclusão de um comando no minibuffer

8

Posso desativar a conclusão do ivy para um único comando enquanto estiver no minibuffer?

Por exemplo, estou na pasta ~ / code / study /. Se eu abrir o arquivo de localização e o preenchimento automático com o Ivy, verei

Find file: ~/code/study/

./ 
../ 
[...]

e eu quero, em um único salto, vá para ~ / other / code / study. Como eu tenho o modo ivy para concluir automaticamente, não consigo mover o cursor para o primeiro / e apenas digitar outro lá. Isso está sendo uma dor para algumas coisas. De alguma forma, posso editar a primeira parte de uma conclusão ou até mesmo desativar temporariamente a conclusão apenas para este comando?

Muito obrigado!

Rafa de Castro
fonte

Respostas:

12

Eu acho que o que você está procurando é C-M-j( ivy-immediate-done) no mini buffer. Esta função é descrita a seguir no manual Ivy :

Sai com a entrada atual em vez do candidato atual (como outros comandos).

Isso é útil, por exemplo, quando você chama o find-file para criar um novo arquivo, mas o nome desejado corresponde a um arquivo existente. Nesse caso, usar C-j selecionaria o arquivo existente, que não é o que você deseja - use este comando.

tirocínio
fonte
Mas como posso colocar meu cursor em ~ / <here> / code / study para editar e aplicar o imediato?
Rafa de Castro
Eu não acho que você pode C-M-j, mas é uma maneira de desativar a conclusão.
tirocinium
5

Existem várias abordagens para a navegação de arquivos que se aplicam aqui.

Apenas para reformular sua declaração:

alterne de ~ / code / study para ~ / other / code / study

  1. Mais fácil e consistente: use ~para alternar para ~/e navegar a partir daí.
  2. Suponha que você tenha visitado ~/code/studyuma vez antes na sessão atual do Emacs. Pressione C-rpara acessar todos os arquivos que você visitou antes. Você pode apagar a parte do arquivo com C-k.
  3. Suponha que você tenha ~/code/studycomo marcador ou recentf. Pressione M-o bpara obter a conclusão para aqueles.
  4. Suponha que você esteja no diredbuffer de ~/code/study. Pressione 0wpara copiar o caminho atual. Pressione C-x C-f C-y: você pode editar o puxão no minibuffer.

Edit: mais uma abordagem

Com a confirmação mais recente , você pode pressionar C-M-o w C-ypara editar o caminho completo no minibuffer. Se você usa muito isso, counsel-find-file-mapestá disponível para vincular essa combinação a algo mais curto.

abo-abo
fonte
1

Você pode editar a raiz do nome do arquivo durante a conclusão digitando DELou <backspace>. Cada tecla pressionada alterna para o diretório pai.

Consulte a seção Conclusão do nome do arquivo do Ivy User Manual para obter mais informações. Em particular, você pode estar interessado no tratamento especial de barras e tildes - inserir duas barras durante qualquer parte da conclusão alterará o diretório para o diretório raiz ( /) e, da mesma forma, um til mudará para o diretório inicial.

Veja também variável personalizável ivy-on-del-error-function.

Manjericão
fonte
Se eu fizer isso, eu teria "~ / code / study" e então retrocederá "~ / code /" then "~" code. E tive que começar de novo com o Dropbox / código / estudo. Eu gostaria de evitar essa repetição de código / estudo.
Rafa de Castro
0

Você ainda pode obter o comportamento padrão do arquivo de localização se

(defun default-find-file ()
  (interactive)
  (exit-minibuffer)
   (let  ((completing-read-function 'completing-read-default))
     (call-interactively 'find-file) ))
Matthias
fonte