prezto icon indicating copy to clipboard operation
prezto copied to clipboard

Completion module doesn't work (but is loaded)

Open luitzifa opened this issue 6 years ago • 14 comments

Description

Completions from completion-module are not working in new shell. I was able to verify that they are loaded by putting just a simple echo into the init.sh of the module.

Expected behavior

When i type vagrant and push tab:

~ ❯ vavagrant
 -- gem subcommand --
--version      -- Prints the Vagrant version information
box            -- Box commands
connect        -- Connects to a shared, remote Vagrant environment
destroy        -- Destroys the vagrant environment
docker-logs    -- Shows Docker logs
docker-run     -- Run one-off commands against a Docker container
global-status  -- Reports the status of all active Vagrant environments on the system
halt           -- Halts the currently running vagrant environment
[...]

Actual behavior

When i type vagrant and push tab:

.zprezto ❯ vagrant
 -- file --
CONTRIBUTING.md  LICENSE          README.md        init.zsh         modules/         runcoms/

Steps to Reproduce

Add a new user and freshly install zprezto...

~ ❯ echo $USER
dakr
~ ❯ sudo -i -u testuser
~ ❯ echo $USER
testuser
~ ❯ grep -B8 "'completion'" .zpreztorc
zstyle ':prezto:load' pmodule \
  'environment' \
  'terminal' \
  'editor' \
  'history' \
  'directory' \
  'spectrum' \
  'utility' \
  'completion' \
~ ❯ grep -H vagrant .zcompdump*
~ ❯ source .zprezto/modules/completion/init.zsh
~ ❯ grep vagrant .zcompdump*
~ ❯ rm -rf .zcompdump*
~ ❯ source .zprezto/modules/completion/init.zsh
~ ❯ grep vagrant .zcompdump*
'vagrant' '_vagrant'
            _trash-restore _udisksctl _ufw _vagrant _virsh \
            _ufw _vagrant _virsh _virtualbox _vnstat \
~ ❯ exit
Good morning! And in case I don't see ya, good afternoon, good evening and goodnight.
  --Truman Burbank
~ ❯ echo $USER
dakr
~ ❯ sudo -i -u testuser
~ ❯ echo $USER
testuser
~ ❯ grep vagrant .zcompdump*
~ ❯ echo 'echo "is loaded"' >> .zprezto/modules/completion/init.zsh
~ ❯ exit
So long and thanks for all the fish.
  -- Douglas Adams
~ ❯ sudo -i -u testuser
is loaded
~ ❯ 

Versions

  • Prezto commit: d4332e2faf420f73ada88397bee95dc4f1da6b97
  • ZSH version: zsh 5.4.2 (x86_64-ubuntu-linux-gnu)
  • OS information: Ubuntu 18.04

luitzifa avatar Jun 01 '18 18:06 luitzifa

Update: I found the source of my Problems:

# If you don't want compinit called here, place the line
# skip_global_compinit=1
# in your $ZDOTDIR/.zshenv or $ZDOTDIR/.zprofile
if [[ -z "$skip_global_compinit" ]]; then
  autoload -U compinit
  compinit
fi

So all i had to do is: echo 'export skip_global_compinit=1' >> ~./.zprofile

luitzifa avatar Jul 27 '18 11:07 luitzifa

Oof this is a bit weird. I'm not sure the best way to solve this since I'd rather not add that export to the prezto runcoms...

belak avatar Sep 28 '18 21:09 belak

Ups totally forgot where this condition is from. It's from /etc/zsh/zshrc in Ubuntu 18.04.

So yes, it's pretty distri specific. So maybe just close and hope everyone will find it by themself?

luitzifa avatar Oct 01 '18 08:10 luitzifa

I'll leave this open for now - it may be worth adding anyway, especially if it's in Ubuntu since it's so commonly used.

belak avatar Oct 01 '18 08:10 belak

Does this affect git completions? I am having an issue with git add completing with

-- not a git repository --

even inside git repositories. Doing the above does not fix the issue, but this issue seems close enough to my problem that I wanted to check.

dylancromer avatar Oct 29 '18 03:10 dylancromer

I bump into a similar problem. in Opensuse 15.0 /etc/zshrc (from package zsh) there is

autoload -U compinit
compinit

in modules/completion/init.zsh there is

if (( $#_comp_files )); then
  compinit -i -C
else
  compinit -i
fi

compinit -i -C doesn't seem to load new _function in $fpath, I had to compinit again.

I hope this helps.

scinart avatar Dec 18 '18 19:12 scinart

Could tab completion no working be caused by users permissions and compaudit?

I ran into a a similar problem with a fresh install. I eventually discover that replacing the .zcompdump created after install with the old one, would make tab completion work again. But now I receive a zsh compinit: insecure directories, run compaudit for list error when starting the Terminal.

Running compaudit show the culprit is my non default /usr/local/Cellar/zsh/ and /usr/local/share/zsh/ permissions. Basically the whole usr/local tree belongs to the group staff and has 2775 permissions set.

To silence the warnings I ran: sudo find /usr/local/Cellar/zsh/ -type d -exec chmod 2755 {} \; sudo find /usr/local/share/zsh/ -type d -exec chmod 2755 {} \;

Everything works fine now and erasing and reinstalling prezto won't cause any issues.

It seems that the whole problem was caused by the non-default permissions, but the big problem was the lack of clues about what was wrong. Instead of causing an error or raising a warning, tab completions was silently failing. Maybe a permissions checking would be in order?

marcolabreu avatar Feb 24 '19 13:02 marcolabreu

In Ubuntu 18.10, I "fixed" this by doing:

# disable default behavior in /etc/zsh/zshrc
echo 'export skip_global_compinit=1' >> ~/.zprofile

echo autoload -U compinit >> ~/.zshrc
echo compinit >> ~/.zshrc

My command-specific tab-completions work now.

stealthybox avatar Mar 23 '19 01:03 stealthybox

Im mint 19 I used @stealthybox fix but I added -C to the compinit instruction to avoid long start time

burgesQ avatar Apr 05 '19 10:04 burgesQ

@burgesQ using compinit -C definitely starts faster, but it breaks command completion for me. I'm not educated as to why.

stealthybox avatar Apr 10 '19 17:04 stealthybox

but it breaks command completion for me

In the end I've struggled the same error once I rebooted my pc (& so maybe my zsh session ?). The first fix I found was to manually run a compinit at boot. Then the compinit -C in my zshrc was then loading the new cache file for each new shell.

After some digging I found some interesting stuff here, and after cleaning the old caches files the completion (& my startup time) worked back like a charm.

So in then end I had to :

  • append export skip_global_compinit=1' to .zprofile`
  • remove the old cache files/directory rm -rf ~/.zcomp{cache,file}*
  • automate the regeneration of the cache file every 24h (zshrc) :
 
# fix completion not working
# https://gist.github.com/ctechols/ca1035271ad134841284
autoload -Uz compinit
if [[ -n ${ZDOTDIR}/.zcompdump(#qN.mh+24) ]]; then
	compinit;
else
	compinit -C;
fi;

burgesQ avatar Apr 12 '19 15:04 burgesQ

@burgesQ acutally this is already done by the completion module: https://github.com/sorin-ionescu/prezto/blob/master/modules/completion/init.zsh#L35-L41

luitzifa avatar Apr 14 '19 12:04 luitzifa

Quick question:

Is it required to delete the ~/.zcompdump in order to get new completions to work after updating the completion submodule?

Hoping there's a better story here if so. I spent a while trying to figure out why it wasn't working and I'm assuming that the check means that it won't load new completions until 20h have passed.

I'm not sure if this is what was happening, but maybe we can add a note to the completion readme if so?

abraithwaite avatar Nov 24 '19 06:11 abraithwaite

I came across this the other day while setting up a new computer –– found that all completions I was adding to my FPATH weren't being found. I kept deleting ~/.zcompdump, but I think that gets copied from ~/.cache/prezto/zcompdump and I had go delete that too.

aspin avatar Jul 19 '22 20:07 aspin